object - 有谁知道为什么 TWEAK 例程在 BUILD 例程之前被击中?
问题描述
最小代码:
#!/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
andBUILD
方法添加到每个缺少它们的示例类中,显示调用的顺序是Widget::BUILD
-> Widget::TWEAK
-> File::BUILD
-> File::TWEAK
。
所以我认为问题在于文档的措辞“在调用 BUILD 方法后,如果存在名为 TWEAK 的方法,则再次调用所有已传递给 new 的命名参数。”
我认为这可能应该是“在为每个类调用 BUILD 方法之后,为该类调用名为 TWEAK 的方法,如果它们存在,再次使用传递给 new 的所有命名参数。”
然后,这将记录似乎正在发生的事情。
注意:自回答此问题以来,文档已更新以反映代码的运行方式。
推荐阅读
- excel - 在我关闭用户窗体而不离开其他工作簿的情况下关闭 excel 文件
- windows - 如何在插入硬件之前枚举/安装/注册 USB 虚拟 COM
- python - 限制 MNIST 训练数据的大小
- qt - 有没有办法在 qml 的新窗口上创建表单?
- react-native - 在 async/await 之后使用 .then 是一种好方法吗?
- xcode - 有人对新的 Xcode 10.3 更新有任何问题吗?
- excel - 如何修复单元格中的“百分比”公式
- ruby-on-rails - Rails 5:如何在不更改 URL 的情况下在控制器中呈现视图?
- python - 获取系列内的数组切片
- python - 正则表达式 Python 提取编号