A Proxy
является заменой единственного контейнера aka Scalar
.Hash
- это множественный контейнер, где каждый элемент по умолчанию является Scalar
.
Возможное решение (на основе Как добавить подписки в мой пользовательский класс в Perl 6? )должен делегировать реализацию Associative
внутреннему хешу, но переопределить метод AT-KEY
, чтобы заменить Scalar
по умолчанию на Proxy
:
class ProxyHash does Associative {
has %!hash handles
<EXISTS-KEY DELETE-KEY push iterator list kv keys values gist Str>;
multi method AT-KEY ($key) is rw {
my $element := %!hash{$key};
Proxy.new:
FETCH => method () { $element },
STORE => method ($value) { $element = $value }
}
}
my %hash is ProxyHash;
%hash<foo> = 42;
say %hash; # {foo => 42}