移相器特性何时运行?

will相位特性的例子表明这样的代码:

our $h will enter { .rememberit() } will undo { .forgetit() };

这要么被误解,要么根本不是真正的用例。如果它被误解了,我会说它enter是分配了一个变量的块。如果它不是一个真正的用例,它会调用一个未定义变量的方法。这是似乎发生的事情:

our &doing-good will enter {
    say( "running" );
        if Backtrace.new.grep: { .subname  ~~ /bad/ } {
            fail("Not authorized to call this");
        }
};

这只是在定义时运行,也就是什么时候输入?该MAIN范围是什么?这可能是文档错误。很有可能 phaser trait 不能真正应用于变量,但上面,当它实际上是一个块时,它并没有真正运行;当完全独立于值的变量定义的事情发生时,“移相器”就会运行,至少在这种情况下是这样。任何的想法?

回答

您所称的“移相器特性”将与其他同名移相器同时运行。

will变量的特征基本上在其周围范围内设置移相器,变量作为唯一的位置参数传递。所以

my $h will enter { dd $_ };

在功能上等同于:

my $h;
ENTER { dd $h }

在你的例子中:

our &doing-good will enter { ... }

您正在定义一个将传递给指定块的变量 &doing-good。在您的示例中,我没有看到该变量被初始化,因此该块将接收一个Callable类型对象(因为&doing-good如果未初始化,它将包含该对象)。


以上是移相器特性何时运行?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>