Хорошо, у меня ушло некоторое время, но я смог заставить все работать.
Вот мое базовое понимание того, что происходит (пожалуйста, поправьте меня, если я ошибаюсь)!
Первым шагом было понять, что нам нужно использовать псевдонимы, чтобы изменить возможности переменной в Pony.
Итак, чтобы сделать изо-переменную пригодной для использования в качестве блока, нужно ее псевдоним в основном, потребляяэто в другую переменную:
let a: Array[U64] ref = consume array // array is "iso"
for (i, item) in a.pairs() do
try a.update(i, item + n)? end
end
Это работает !!
Еще одна проблема, с которой я столкнулся, заключалась в том, что я ничего не мог поделать с результатом Array[U64] ref
.Например, не могу передать его кому-либо.
Поэтому я обернул все это в блок recover
, чтобы получить тот же массив, но в виде val
(неизменяемая ссылка намассив), который более полезен, поскольку я могу отправить его другим акторам:
let result = recover val
let a: Array[U64] ref = consume array
for (i, item) in a.pairs() do
try a.update(i, item + n)? end
end
a
end
Теперь я могу отправить result
любому!