class Proxy {}

Proxy 是一个对象,它允许您设置一个钩子,该钩子在从容器中检索值(FETCH)或设置值(STORE)时执行。请注意,Proxy 可以在破坏行为的地方引入可变性,例如在 Hash 键中。

要创建一个返回存储在其中值的 2 倍的容器,您可以执行类似以下操作

sub double() is rw {
    my $storage = 0;
    Proxy.new(
        FETCH => method ()     { $storage * 2    },
        STORE => method ($new{ $storage = $new },
    )
}
my $doubled := double();
$doubled = 4;
say $doubled;       # OUTPUT: «8␤» 

方法§

方法 new§

method new(:&FETCH!:&STORE! --> Proxy:D)

创建一个新的 Proxy 对象。当访问值时,&FETCH 会使用一个参数(代理对象)进行调用,并且必须返回获取产生的值。当在容器中存储新值时,&STORE 会使用两个参数(代理对象和新值)进行调用。

类型图§

Proxy 的类型关系
raku-type-graph Proxy Proxy Any Any Proxy->Any Mu Mu Any->Mu

展开上方的图表