我想为一个属性赋予特征,以为其提供代理,以便即使$!direct-access在一个类中也可以操纵所见内容的值。
这就是我现在所拥有的,但是正如您所看到的,从未调用过实际的get / set或store / fetch方法。我可能没有正确地应用它们,但是我发现的唯一示例似乎有大量额外的代码,它们的工作方式超出了我的需要,但我无法隔离重要的部分。
# The below shows on a Str more or less how I'd expect things to work
# although the %data wouldn't be hard coded of course
my Str $localized := do {
my %data = hi => "hola", bye => "adiós";
my $str = "";
Proxy.new:
:STORE{ $str = @_[1] },
:FETCH{ with %data{$str} { $_ } else { $str } }
}
$localized = "hi";
say $localized;
$localized = "bye";
say …Run Code Online (Sandbox Code Playgroud) 这个例子是采取从roast,虽然它已经有8年了:
role doc { has $.doc is rw }
multi trait_mod:<is>(Variable $a, :$docced!) {
$a does doc.new(doc => $docced);
}
my $dog is docced('barks');
say $dog.VAR;
Run Code Online (Sandbox Code Playgroud)
这将返回Any,而不会混入任何角色。尽管特质不会出错,但显然没有办法进入“ doc”部分。任何的想法?