parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

а откуда взялась непустота?

Maxx 04.07.2007 00:31 / 04.07.2007 00:47

код, который вставляется после каждой непустой строки, кроме последней.

почему в циклах пустое значение считается несущественным? Ведь это порождает определенные трудности и не всегда их причина очевидна..

Пример (не претендую на осмысленность, скорее чтобы суть показать).
Есть список из N-значений, нужно их вывести в виде одной колонки. В списке могут быть пропуски. Делаем:
$list[1,2,,4,x5]
$table[^list.split[,;lv]]
<pre>^table.menu{$table.piece}[^#0A]</pre>
Получаем:
1
2
4
x5
хотя хотелось, видимо
1
2

4
x5
, но одно значение сьелось, и вместо списка из 5-ти значений, одно из которых пустое, мы получили список их 4-х значений.

Второй не такой простой случай, который приходит в голову. Понадобился метод, который просто печатает переданную ему таблицу... любую. Пишем:
@printTable[t]
$tCols[^t.columns[]]
^tCols.menu{$tCols.column}[^#09]
^t.menu{^tCols.menu{$t.[$tCols.column]}[^#09]}[^#0A]
Вызываем:
$table[^table::create{c1	c2	c3
1	2	3
4		6
}]
<pre>^printTable[$table]</pre>
Результат не соответствует исходной таблице:
c1	c2	c3
1	2	3
4	6
Из-за того, что одна ячейка не определена ^tCols.menu{}[] не вставила после нее разделитель.
Это конечно лечится, например вместо разделителя можно использовать переменную, типа так:
...
$firstColumn(true)
^tCols.menu{^if($firstColumn){${tCols.column}$firstColumn(false)}{^#09$tCols.column}}
но как то это не изящно, и перечеркивает смысл в разделителе как таковом (вместо ^#09 можно вызывать метод, возвращающий строку разделителя).

Вот и интересно - ради чего была сделана вставка разделителя, только после/до НЕ пустого тела, чем этот подход лучше, чем вставка разделителя после любой не последней строки? Кстати тогда и не нужно было бы забегать вперед, при .menu{}