什么是本地范围?

说实话,我仍然对实例变量和局部变量感到困惑,不确定应该使用哪个。

我所知道的只有一个不能使用的局部变量的条件是:

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 

一旦你超出范围( fooend被传递), 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变量范围的文章

关于范围的文章