gpt4 book ai didi

raku - 我可以在 Nil 上调用任何方法,这感觉不对

转载 作者:行者123 更新时间:2023-12-04 11:18:19 25 4
gpt4 key购买 nike

我最近花了很多时间调试一个脚本,当我最终发现问题时,是因为代码看起来像这样:

class Foo {
has $.bar;
method () {
# do stuff
$!.bar;
}
}

原来问题出在 $!.bar ,应该是 $!bar$.bar .我明白了。

但这为什么不死呢?

更详细地看这个,看起来这里的问题是我试图调用一个(不存在的)方法 bar $! ,此时是 Nil因为没有任何错误。

看起来我实际上可以在 Nil 上调用我想要的任何方法他们都默默地回了 Nil ,包括诸如 Nil.this-is-a-fake-method 之类的东西和 Nil.reverse-entropy(123) .

这是一个功能吗?如果是这样,理由是什么?

最佳答案

是的,它是有意并记录在案的。 Nil 的标题是“缺少值或良性故障”,class documentation 提到

Any method call on Nil of a method that does not exist, and consequently, any subscripting operation, will succeed and return Nil.

say Nil.ITotallyJustMadeThisUp;  # OUTPUT: «Nil␤» 
say (Nil)[100]; # OUTPUT: «Nil␤»
say (Nil){100}; # OUTPUT: «Nil␤»


Synopsis 2 声明“对 Nil 的任何未定义的方法调用返回 Nil ,因此 Nil 向下传播方法调用链。同样,对 Nil 的任何下标操作都返回 0x1047,因此每个步骤似乎都需要检查 0x1047 和 0x1045 等 0x1046, 1077914,或特殊的“零安全”方法调用和下标运算符。

关于raku - 我可以在 Nil 上调用任何方法,这感觉不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com