【发布时间】:2021-05-06 05:51:50
【问题描述】:
这个问题几乎与Apply a proxy using traits 重复。但是,该问题涉及将代理应用于属性,我想对变量做同样的事情。从乔纳森的回答中,我明白我
需要安排 Proxy 绑定到属性中,以便那里有一个 Proxy,而不是通常由类初始化逻辑创建的 Scalar 容器。
但是,我似乎无法成功绑定到变量:D,即使在编译时也是如此。 (包括 nqp::bind)。我将不胜感激任何正确方向的指针。
(理想情况下,我希望支持将变量/特征与赋值语法一起使用。在完美的世界中,我的语法如下:
my $thing is custom-proxy = 42;
结果是$thing 在代理中被容器化,但在标量中不是。但如果这不可能,我会通过:= 让它与绑定一起工作。
[编辑:在下面接受的答案的基础上,大部分可以使用以下代码执行此操作:
multi trait_mod:<is>(Variable \v, :$tom) {
v.block.add_phaser(
'ENTER',
v.willdo(<-> $_ {
$_ = Proxy.new:
STORE => -> $, $v { say "store $v" },
FETCH => { say "fetch!"; 42}
}, 1))
}
这适用于未初始化为不同值的变量,或者适用于调用除第一个函数之外的函数时的 state 变量。
【问题讨论】: