[Ruby] 中define_method 的使用

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


假设 define_method 扁平化了作用域 ,那么 three_method 中的 self  应该是 这个类  ,和SLE一样 ,self是类的本身

但是不是 ,不知道为什么


你可能感兴趣的:(Ruby,define_method,S)