- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
private static string AddStr(string s1, string s2)
{
string result;
if (s1 == string.Empty)
{
result = s2;
}
else
{
if (s2 == string.Empty)
{
result = s1;
}
else
{
result = s1 + " " + s2;
}
}
return result;
}
guest 06.09.2013 15:00 # −7
guest 06.09.2013 15:09 # −14
bormand 06.09.2013 15:44 # +3
Lennis 06.09.2013 15:51 # 0
kegdan 06.09.2013 16:18 # +1
roman-kashitsyn 06.09.2013 16:19 # +1
bormand 06.09.2013 16:28 # +1
kegdan 06.09.2013 19:24 # 0
то есть так сливать массивы лучше?
я не говорил, что код поста хорош - я сказал что приведенный - еще хуже
bormand 06.09.2013 22:13 # 0
Имхо - нет. И оригинал был нагляднее (если пофиксить некоторые недоразумения типа обработки null'ов).
Но я о другом писал - мне кажется, что автор будет в цикле бежать по какому-нибудь массиву строк и вызывать функцию из топика для аккумулятора и текущей строки (говноаналог string.Join(" ", array))... И я искренне надеюсь, что эту функцию не юзают в таком контексте... Вот из-за этого у меня сомнения в нужности данной функции.
kegdan 07.09.2013 14:45 # 0
bormand 07.09.2013 14:52 # 0
string.join(" ", array), если не учетывать потенциальную пустоту строк. А если учитывать - можно сначала отфильтровать их, а потом join.
kegdan 07.09.2013 15:00 # 0
можно фильтровать в процессе слияния
Qwertiy 08.09.2013 02:17 # 0
Только надо метод переименовать. И я бы через условный оператор написал.
А вариант с Format + Trim - гадость.
bormand 08.09.2013 06:20 # 0
Там потенциально может захотеться еще и отчество добавить... Поэтому я бы или 3 аргумента сделал (и назвал бы соответственно), или методом к объекту, хранящему инфе о человеке прикрутил...
vistefan 08.09.2013 20:51 # +1
Потенциально может и не захотеться. Код интернационален, комментариев на русском мы в нём не видим. Откель нам знать, что у пользователей этого софта вообще есть отчество. У них там за бугром вторые имена в ходу.
anonimb84a2f6fd141 08.09.2013 22:20 # −1
Прям таки везде "за бугром"? Кое-где, например, встречаются двойные имена.
bormand 09.09.2013 05:51 # 0
Мистер Хэнки 06.09.2013 16:20 # −3
bormand 06.09.2013 16:34 # +4
По крайней мере оно предсказуемей чем Format+Trim, которые пожирают пробельные символы по краям s1 и s2.
TarasB 09.09.2013 09:49 # +4
bormand 09.09.2013 11:01 # 0
Тем более в покоцаном виде.
bormand 06.09.2013 16:27 # +2
Lennis 06.09.2013 16:52 # +3
wvxvw 08.09.2013 23:00 # 0
;)
defecate-plusplus 08.09.2013 23:50 # 0
bormand 09.09.2013 06:02 # 0
Почему такое странное имя для функции проверяющей на непустоту строки, если не секрет?
> (+ (%f a) (* 2 (%f b)))
> "~[~2*~;~a~*~;~*~a~;~a ~a~]"
А если строк будет три? :)
bormand 09.09.2013 06:12 # 0
wvxvw 09.09.2013 08:04 # 0
bormand 09.09.2013 08:08 # 0
Почему?
bormand 09.09.2013 08:14 # 0
wvxvw 09.09.2013 08:19 # 0
Почему не рабочий: %f всегда возвращает true. remove-if-not ничего не удалит.
Ну, предположительно, для большого количества строк эта функция не нужна, т.как можно просто сделать (format ? "~{~a~^ ~}").
bormand 09.09.2013 08:30 # 0
Хм, да, тупанул я. В лиспе же только nil это false.
anonimb84a2f6fd141 09.09.2013 15:19 # 0
В каких?
bormand 09.09.2013 16:09 # +1
wvxvw 09.09.2013 17:09 # 0
bormand 09.09.2013 17:54 # 0
А живущим у подножья олимпа их юзать строжайше запрещено... А в вашем случае % это нечто используемое лисперами в повседневной практике. Поэтому, имхо, ассоциация не катит...
P.S. А почему бы не назвать эту функцию просто f, ведь за скоп labels'ов ее имя не вылезет. С пометкой глобальных переменных звездочками я полностью согласен, а вот локальные, имхо, помечать не стоит.
wvxvw 09.09.2013 18:35 # 0
В Лиспе нет глобальных переменных.
Это не предикат, с чего бы ее так называть? Она просто техническая функция без какого-то определенного названия.
bormand 09.09.2013 19:00 # 0
А ну да, я забыл, что она возвращает не nil/t, а 0/1. Тогда да, not-empty не катит.
> В Лиспе нет глобальных переменных.
defvar package-private получается?
wvxvw 09.09.2013 19:13 # 0
defvar создает символ и объявляет связаную с ним переменную как "специальную" + если это происходит в топ-левел, следит за тем, чтобы значение переменной обозначенной этим символов назначалось только один раз (т.е. при повторном прочтении файла значение не будет переустановлено). Но если сильно хочется, то можно потом отменить "специальность" этой переменной.
bormand 09.09.2013 19:27 # 0
Ага, т.е. все-таки package-private получается.
> отменить "специальность" этой переменной
Насовсем, или только внутри какого-то скопа?
wvxvw 09.09.2013 19:33 # 0
Отменить можно вообще. Это свойство хранится в списке свойств символа, а он как-бы один всегда.
bormand 09.09.2013 19:46 # 0
Каждый пакет имеет свой неймспейс для символов?
Все, кажется понял, что такое special. Просто флаг, увидев который let'ы, setf'ы, и обращения к помеченному им символу раскрываются в другой код.
wvxvw 09.09.2013 19:51 # +1
Пакет сам по себе и является "неймспейсом" для символов. "Неймспейсом" в том смысле, в котором бы это слово использовалось в Ц++.
bormand 09.09.2013 20:06 # 0
wvxvw 09.09.2013 20:18 # 0
Дилан, на сколько я понимаю, тоже Лисп-1.
bormand 09.09.2013 18:01 # 0
А я бы написал not-empty, все-таки хоть имя для такой мелочи в таких мелких скопах и не важно, но с именем читать как-то приятней.
bormand 09.09.2013 06:53 # 0
bormand 09.09.2013 07:09 # 0
kegdan 09.09.2013 07:37 # 0
bormand 09.09.2013 07:55 # +1
Qwertiy 17.09.2013 23:07 # +1
sprintf(..., "%s%s%s", a, " "+(!*a||!*b), b);
Сложение, а не индекс. Ну и первая строка ещё.
bormand 17.09.2013 23:25 # 0
Да, все верно.
wvxvw 09.09.2013 07:43 # 0
1. Консит новую память (плохо).
2. Можно передать больше двух параметров (не эквивалентно исходному варианту).
Вариант с printf в принципе похож, но я сам ничего не выбираю, выбор описан декларативно в строке формата. Полным аналогом было бы (format stream (aref #("~a ~a" ...)) a b)
bormand 09.09.2013 08:05 # 0
> Консит новую память (плохо).
Есть такая проблема. Но с произвольным количеством строк по другому, походу, и не получится.
> Можно передать больше двух параметров (не эквивалентно исходному варианту)
Да я хотел немного универсальности добавить... Отсюда и переименование в join-strings.
bormand 09.09.2013 08:07 # 0
wvxvw 09.09.2013 08:27 # 0
Если уже пользоваться форматом, так для всего.
bormand 09.09.2013 08:32 # 0
А нет ли там какой-то конструкции в format'е, которая управлялась бы не числом а nil/t?
wvxvw 09.09.2013 08:35 # 0
bormand 09.09.2013 08:38 # 0
bormand 09.09.2013 08:40 # 0
wvxvw 09.09.2013 08:43 # 0
bormand 09.09.2013 08:59 # +1
Yuuri 11.09.2013 12:02 # +1
bormand 11.09.2013 12:17 # +2
Yuuri 11.09.2013 12:24 # 0
Eugene 06.09.2013 16:56 # +4
bormand 06.09.2013 19:25 # 0
kegdan 06.09.2013 19:29 # +1
anonimb84a2f6fd141 06.09.2013 21:33 # 0
kegdan 06.09.2013 22:07 # 0
bormand 06.09.2013 22:09 # +1
kegdan 07.09.2013 14:45 # 0
Qwertiy 08.09.2013 02:23 # 0