define_method 定义一个新的方法
和def定义方法不同的是 define_method 扁平化了作用域
具体的用法如下
class ScopeClass
SLE = self
a = "string"
def one_method
puts "hello Ruby"
end
define_method :three_method do
puts a
end
end
可以看出 使用 define_method 可以直接使用 a
但是 在 one_method 中是 没有办法使用 a的
这就是所谓的扁平化作用域
但是我很奇怪的是一点
class ScopeClass
SLE = self
a = "string"
def one_method
puts "hello Ruby"
puts self
end
define_method :three_method do
puts a
puts self
end
end
obj = Scope.new
obj.one_method
obj.three_method
ScopeClass::SLE
但是不是 ,不知道为什么