说实话,我仍然对实例变量和局部变量感到困惑,不确定应该使用哪个
我所知道的唯一一个不能使用局部变量的条件是:
class MyClass
def initialize
local_var = 1
@instance_var = 1
end
def show_local_var
local_var
end
def show_instance_var
@instance_var
end
end
显然,MyClass.new.show_instance_var
起作用,而MyClass.new_show_local_var
不起作用
local_var = 1
3.times do
puts local_var
end
我只知道这些区别,还有其他的吗?请让我知道
如果有关于这方面的文章,那将对我很有帮助,
局部变量是"此时此地"使用的,不能从其他任何地方访问。
class MyClass
def foo
local_var = 2
#I use this to do some sort of calculation
@instance_var = local_var + 34
local_var = 5 * @instance_var
puts local_var
end
# From here, local_var is unaccessible.
end
一旦超出范围(foo
的end
通过),local_var
就不再存在,不能被引用。
实例变量在任何时候都对整个类可用。
class MyClass
def initialize
@instance_var = 0
end
def foo
local_var = 2
#I use this to do some sort of calculation
@instance_var = local_var + 34
end
def some_operation
if @instance_var == 36
@instance_var = 3
else
@instance_var = 1
end
end
end
所以当你调用m = MyClass.new
和后来的m.some_operation
时,它与相同的@instance_var
一起工作。
在这里,也有类变量(定义为@@class_var
)可以从类的任何实例访问。
我没有一篇特别的文章提供给你,但是一些关于ruby variable scope
和每一种变量类型独立的谷歌应该为你提供你需要的所有信息!
您描述的第二个例子称为闭包。Paul说得很好:
闭包是满足三个条件的代码块:
- 它可以作为一个值和
传递- 应任何具有该值的人的要求执行,此时
- 它可以从创建它的上下文中引用变量(也就是说,它在变量访问方面是封闭的,在数学意义上是"封闭的")。
关于Ruby中可用作用域的简单介绍,您可以参考Ruby Programming wikibook。
There is
- 局部范围 全球范围实例范围
- 类范围
"默认作用域",有时在执行没有作用域修饰符的代码时使用,如
@iv = "Who do I belong to?"
是'main'对象的作用域。
局部作用域仅限于变量声明的位置,即函数或for循环,但不能从该位置外部访问。但是,如果在函数中嵌套其他结构,如for循环等,则内部结构可以访问局部变量。实例变量的作用域是类的实例。
关于ruby变量作用域的文章
通则