最小代码:
#!/usr/bin/raku
class Widget {
submethod TWEAK(:$content, :$styles) {
say "t1\n";
}
}
class File is Widget {
submethod BUILD() {
say "b1";
}
}
my $xml = File.new();
并输出:
t1
b1
相关文档位于https://docs.raku.org/language/objects#Object_construction。我引用:“在调用BUILD方法之后,将调用名为TWEAK的方法(如果存在的话),并使用传递给new的所有命名参数来进行调用。”
我使用的是Fedora 32附带的rakudo版本(rakudo-0.2020.02-1.fc32.x86_64可能是今年2月)。
谢谢大家的协助!
一个快速实验向缺少示例的每个示例类添加TWEAK
和BUILD
方法,显示调用顺序为Widget::BUILD
-> Widget::TWEAK
-> File::BUILD
-> File::TWEAK
。
因此,我认为问题出在文档的措辞上:“在调用BUILD方法之后,将调用名为TWEAK的方法(如果存在的话),并使用传递给new的所有命名参数。”
我想,这应该有可能是“BUILD方法被调用后为每个类,被称为命名TWEAK方法该类,如果存在,再次与所有传递给新的命名参数。”
然后,这将记录似乎正在发生的事情。
注意:自回答此问题以来,文档已更新以反映代码的运行方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句