Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Ruby-未定义的局部变量_Ruby_Variables - Fatal编程技术网

理解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

我一直在和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(namererror)的方法'a'”

a不应该是零而不会导致错误吗?

这是因为-

在第一个代码中,解析器看到行
a={:a=>10,:b=>20}
,因此创建了一个变量,但没有赋值。因此
a
nil
a |{}
返回
{}


在第二个代码中,解析器没有看到
a
发生任何赋值,因此
a
没有被创建为局部变量,也没有创建名为
a
的方法。因此,当您尝试使用
a
时,得到了您报告的有效错误,即未定义的局部变量或方法“a”。

我明白了,谢谢。你知道使用这种方法有什么好处吗?这对我来说似乎不是很直观。@chibi03我也链接了文档,请仔细阅读,那里有很多知识。