3.作用域和作用域门

1.class,module,def充当作用域门,作用域内部的local variable不能访问外部的local variable,反之亦然
2.区别块作用域,块内部可以访问块外部绑定的local variable,但是块外部不能访问块内部的local variable
3.区别块变量作用域,Ruby2.0之后的块变量不会改变局部变量的值

#示例代码:
v1 = 1
class MyClass  #作用域门,进入MyClass
  v2 = 2
  local_variables  #=>["v2"]

  def my_method  #进入作用域门,进入def
    v3 = 3
    local_variables
  end  #作用域门,离开def

  local_variables  #=>["v2"]
end  #作用域门,离开class

obj = MyClass.new
obj.my_method
obj.my_method
puts local_variables #=>[:v1, :obj]

#class/module与def之间的差别
类和模块定义中的代码会被立即执行,方法定义中的代码只有方法被调用时才被执行。

#区别块变量作用域,Ruby2.0之后的块变量不会改变局部变量的值
x = 10
[1,3,3].each do |x|
  puts x  #其中这里的x是块变量x
end
x #=>10,这里的变量是局部变量x

#示例代码,块变量不会改变局部变量的值,但是块中的局部变量会改变绑定的值
y = 10
x = 10
[1,2,3].each do |x|
  y = 11 #局部变量
  x = 11 #虽然是局部变量的形式,但其实是块变量
end
puts y #11
puts x #10

results matching ""

    No results matching ""