我有下面的Ruby代码:
local_var = "Hello"
def hello
puts local_var
end
hello
出现以下错误:
local_variables.rb:4:in 'hello': undefined local variable or method 'local_var'
for main:Object (NameError) from local_variables.rb:7:in '<main>'
我一直认为局部变量是不能从块、函数、闭包等外部访问的。
但是现在我在文件中定义了局部变量,并尝试从函数INSIDE中访问同一个文件。
我的理解有什么问题?
3条答案
按热度按时间zqry0prt1#
在Ruby中,局部变量只能在它们定义的作用域中访问。无论何时你进入/离开一个类,一个模块或一个方法,你的作用域定义在Ruby中都会改变。
例如:
这些进入和离开点被称为范围门,因为你是通过方法定义进入范围门的,所以你不能在
hello
方法内部访问你的local_var
。您可以使用范围扁平化概念将变量传递通过这些门。
例如,您可以使用
Module#define_method
来定义方法,而不是使用def
。同样,您可以通过
Class#New
定义类,以便在传递类定义时作用域不会更改。代替
同样,如果你想让你的局部变量通过模块门,你应该使用
Module#New
。示例取自Metaprogramming Ruby
e4yzc0pl2#
确保函数接受参数,并在调用时将对象作为参数之一添加
6yt4nkrj3#
local_var
是一个局部变量。局部变量对于它们定义的作用域来说是局部的。(这就是为什么它们被称为“局部变量”!)所以,很明显,由于local_var
是在脚本作用域中定义的,所以您不能在方法作用域中访问它。