什么是局部作用域



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

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

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和每一种变量类型独立的谷歌应该为你提供你需要的所有信息!

您描述的第二个例子称为闭包。Paul说得很好:

闭包是满足三个条件的代码块:

  • 它可以作为一个值和
  • 传递
  • 应任何具有该值的人的要求执行,此时
  • 它可以从创建它的上下文中引用变量(也就是说,它在变量访问方面是封闭的,在数学意义上是"封闭的")。

关于Ruby中可用作用域的简单介绍,您可以参考Ruby Programming wikibook。

There is

  • 局部范围
  • 全球范围
  • 实例范围
  • 类范围

"默认作用域",有时在执行没有作用域修饰符的代码时使用,如

@iv = "Who do I belong to?"

是'main'对象的作用域。

局部作用域仅限于变量声明的位置,即函数或for循环,但不能从该位置外部访问。但是,如果在函数中嵌套其他结构,如for循环等,则内部结构可以访问局部变量。实例变量的作用域是类的实例。

关于ruby变量作用域的文章

通则

最新更新