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
、最後の反復の値があるかのように動作します。
これはどのように行われていますか?これを行う必要がありますか?