刚写的一个小测试,记录下来
我们知道module class def这样的关键字会封闭变量的作用域
当需要在另一个类里直接调用外部变量时,可以使用扁平化作用域的编写方式:
module Try
  MyClass1 = Class.new do |ef|
    def ffff
      p "ffff"
    end
  end
  my = MyClass1.new
  MyClass2 = Class.new do |ef|
    define_method(:gggg) do |args = nil|
      p defined? my
      my.ffff
      p args
    end
  end
  MyClass2.new.gggg
  #=> "local-variable"
  #=> "ffff"
  #=> nil
  MyClass2.new.send :gggg, 123
  #=> "local-variable"
  #=> "ffff"
  #=> 123
  class MyClass3
    define_method(:gggg) do |args = nil|
      p defined? my
    end
  end
  MyClass3.new.gggg
  #=> nil
end
使用关键字定义时,my 是未定义的变量
使用块扁平化作用域时,my 是同一个作用域内的局部变量