Для:
words: [num]
vals: [1 2 3]
Когда вы используете foreach :words
, вы создаете новый контекст, к которому будет привязан повторяющийся блок.Содержимое word!
в :words
фактически не связано с этим новым контекстом.Значения, которые вы получаете, предполагают, что 'a
глобально установлено на 1, а 'b
установлено на [a b]
.Чтобы проиллюстрировать:
>> num: 9
== 9
>> words: [num]
== [num]
>> foreach :words vals [
[ probe get 'num
[ probe get first :words
[ ]
1
9
2
9
3
9
== 9
Чтобы обойти это, попробуйте представить, что для каждой итерации цикла выполняемый блок 'bind
привязан к контексту цикла.Вы можете выгрузить привязку следующим образом:
foreach :words vals probe compose/only [
probe get first (words)
]
(зонд оставлен для иллюстративных целей)