Либо удалите return
:
method value( Real $newval? ) is rw {
Proxy.new:
FETCH => sub ($) { $!value },
STORE => sub ($, $newval) { $!value = $newval },
}
, либо используйте return-rw
, если вы действительно хотите быть явным:
method value( Real $newval? ) is rw {
return-rw Proxy.new:
FETCH => sub ($) { $!value },
STORE => sub ($, $newval) { $!value = $newval },
}
Проблема в том, что return
будет раздеватьуберите любой контейнер с предметами, так что простого помещения is rw
в method
недостаточно для самого себя.
Относительно того, почему опубликованный код работал, но больше не работает: Rakudo выпускает в последней паремесяцев включало исправление для ошибки, которая означала, что Proxy
обрабатывался иначе, чем Scalar
в обычной обработке возврата.Proxy
не был раздет в местах, где он должен был быть;теперь это надежно.