什么是本地范围?
说实话,我仍然对实例变量和局部变量感到困惑,不确定应该使用哪个。
我所知道的只有一个不能使用的局部变量的条件是:
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
博客和关于每种类型的变量的独立应该为您提供所需的所有信息!
您描述的第二个示例称为Closure 。 保罗说得很好:
闭包是一个符合三个标准的代码块:
- 它可以作为值传递
- 具有该值的任何人按需执行
- 它可以从创建它的上下文中引用变量(即,在“闭合”一词的数学意义上,它关于变量访问是关闭的)。
有关Ruby中可用范围的快速介绍,您可以参考Ruby Programming wikibook 。
有
- 本地范围
- 全球范围
- 实例范围
- 类范围
“默认范围”,因为在执行没有范围修饰符的代码时有时会引用它,如
@iv = "Who do I belong to?"
是’主’对象的范围。
本地范围仅限于声明变量的位置,即函数或for循环,但不能从该位置外部访问。 但是,如果在函数,for循环等中嵌套其他构造,则内部构造可以访问局部变量。 实例变量的范围限定为类的实例。
关于ruby变量范围的文章
关于范围的文章