刚写的一个小测试,记录下来
我们知道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 是同一个作用域内的局部变量