【发布时间】:2023-03-14 10:40:02
【问题描述】:
如果我执行这个 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。
puts foo()仍然有效。发生的事情是局部变量foo已经存在。抱歉,我无法回答为什么会这样。 -
我也无法回答为什么。但是,如果局部变量和方法之间存在歧义,请务必使用
self.foo表示方法,使用foo表示变量。 -
@sawa - 我不会再回滚,但我不明白你的评论,我不明白你为什么改变 bmesuere 的问题。这个问题没有错。我认为不需要编辑它。
-
@Mischa 我改了三点。 1、
puts不输出nil。它必须是p。 2. 不需要额外定义一个方法并调用它。将其删除并直接放置将使读者友好。 3. 输出defined?值更自然、更友好 -
@sawa - 你的观点是有效的,我只是说这个问题没有你的编辑是完全可以理解的。如果是代码审查,我会同意,但我不明白您为什么必须更改问题。此外,现在的方式,bmesuere 得到的输出,与 your 代码不对应。
标签: ruby local-variables