map-each
может быть использован для оценки какого-то кода для каждого элемента в коллекции, а также агрегировать результаты оценки в блоке:Почему 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
Так что это слишком поздно, оценка должна быть сделана с УМЕНЬШИТЬ или COMPOSE внутри тела карты-каждый. Но ...
>> reduce first blocks
== [20]
>> reduce second blocks
== [20]
Оценки элементов в результирующем блоке не выдаст ошибку, но вести себя так, как будто x
имел значение последней итерации.
Как это делается? Должно ли это быть этим?
Похоже, что блок по-прежнему связан с анонимным контекстом, созданным картой, и поэтому x сохраняет последнее значение. –