Да.Есть только один вызов, но он внутри foreach
.По умолчанию у вас два поля, поэтому вас спросят дважды.Введите больше, вас спросят больше.
Хотя вы можете (и, вероятно, должны) сделать очевидную вещь, сохраняя ее в переменной, у Rebol есть и другие способы.Например, вы можете compose
блок кода:
foreach field-layout fields-layout COMPOSE/DEEP [
append fields-template-output " "
append fields-template-output form reduce [
to-word (get-access-modifier) field-layout
]
append fields-template-output ";"
append fields-template-output newline
]
Композиция запускается один раз, внимательно изучает скобки в блоке и оценивает код.(Вроде как разбирает, когда видит круглые скобки).Остальные остались одни.Таким образом, блок с выполненными заменами - это то, что передается в FOREACH для запуска цикла.
Просто нюанс того, как вы могли иметь вызов, который, кажется, находится внутри цикла и все же выполняетсятолько однажды.Я бы не предложил использовать его для чего-то подобного.
То, что я предложил бы , - это изучение того, как сделать вещи менее излишними в вашем коде, путем изучения еще нескольких примитивов Rebol, например REJOIN ...строит серию из блока.Тип серии будет соответствовать первому типу (или строке, если первый элемент не является серией):
modifier: get-access-modifier ;-- called only once, stored in variable
foreach field-layout fields-layout [
append fields-template-output rejoin [
" "
(to-string modifier)
field-layout
";"
newline
]
]