理解Ruby-未定义的局部变量
我一直在和Ruby玩,遇到了这种奇怪的行为。谁能告诉我为什么会这样 如果我跑步:理解Ruby-未定义的局部变量,ruby,variables,Ruby,Variables,我一直在和Ruby玩,遇到了这种奇怪的行为。谁能告诉我为什么会这样 如果我跑步: def my_fn if false then a = {:a=>10, :b=>20} end puts a.class a || {} end 并打印代码成功编译的结果并返回{}。 但如果我将代码更改为: def my_fn puts a.class a || {} end 它不返回{},但抛出一个错误“'my_fn':未定义的局部变量或main:Object(n
def my_fn
if false then
a = {:a=>10, :b=>20}
end
puts a.class
a || {}
end
并打印代码成功编译的结果并返回{}。
但如果我将代码更改为:
def my_fn
puts a.class
a || {}
end
它不返回{},但抛出一个错误<代码>“'my_fn':未定义的局部变量或main:Object(namererror)的方法'a'”
a不应该是零而不会导致错误吗?这是因为-
在第一个代码中,解析器看到行a={:a=>10,:b=>20}
,因此创建了一个变量,但没有赋值。因此a
是nil
a |{}
返回{}
在第二个代码中,解析器没有看到
a
发生任何赋值,因此a
没有被创建为局部变量,也没有创建名为a
的方法。因此,当您尝试使用a
时,得到了您报告的有效错误,即未定义的局部变量或方法“a”。我明白了,谢谢。你知道使用这种方法有什么好处吗?这对我来说似乎不是很直观。@chibi03我也链接了文档,请仔细阅读,那里有很多知识。