gpt4 book ai didi

Ruby:方法莫名其妙地被覆盖并设置为零

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:47 25 4
gpt4 key购买 nike

如果我执行这个 ruby​​ 代码:

def foo
100
end

p defined?(foo), foo
if false
foo = 200
end
p defined?(foo), foo

我得到的输出是:

"method"
100
"local-variable"
nil

有人可以向我解释为什么 foo 在不执行 if 后设置为 nil 吗?这是预期的行为还是 ruby​​ 错误?

最佳答案

分配左侧的名称设置为 nil,即使在 if false 情况下无法访问代码。

>> foo
NameError: undefined local variable or method `foo' for main:Object
...
>> if false
.. foo = 1
.. end #=> nil
>> foo #=> nil

当 Ruby 尝试解析裸字时,它首先会查找局部变量(在 Pickaxe 书中有对此的引用,但我目前似乎找不到)。由于您现在有一个名为 foo 的代码,因此它显示 nil。正如 Mischa 指出的那样,该方法仍然可以作为 foo() 调用。

关于Ruby:方法莫名其妙地被覆盖并设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505916/

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