map-each
可用于评估集合中每个成员的一些代码,并将评估结果聚合在一个块中:
>> values: map-each x [1 2] [
print ["Doing mapping for" x]
x * 10
]
Doing mapping for 1
Doing mapping for 2
== [10 20]
我以这种方式构建了一块块。但是我忘记了,由于默认情况下不对块进行评估,因此x
将保持原样并且不会获得我想要的值:
>> blocks: map-each x [1 2] [
print ["Doing mapping for" x]
[x * 10]
]
Doing mapping for 1
Doing mapping for 2
== [[x * 10] [x * 10]]
那里并不奇怪。评估后x
没有价值——更不用说承担许多价值的能力了:
>> probe x
** Script error: x has no value
所以为时已晚,必须在 map-each 的主体内使用 REDUCE 或 COMPOSE 进行评估。但...
>> reduce first blocks
== [20]
>> reduce second blocks
== [20]
结果块中项目的评估不会引发错误,但表现得好像x
具有最后一次迭代的值。
它是如何做到的?它应该这样做吗?