繁体   English   中英

防止在祖先链中查找方法(method_missing)

[英]Prevent methods lookup in ancestor chain(method_missing)

我有一个代码如下

def address 
  p "address" 
end 

class Person 
  def method_missing(sym, *args) 
     "#{sym} not defined on #{self}" 
  end

  def name 
    "My name is Person" 
  end
end

p = Person.new 
p.name # => My name is Person 
p.address # => expected output is 'address not defined on # <Person:0x007fb2bb022fe0>' but actual output is 'address' 

我想利用 method_missing。 但是词汇作用域在这里发挥作用。 所以 method_missing 变得过时了。 任何解决方法?

正如@AlekseiMatiushkin 所说,代码在文件中运行良好。 如果你真的需要它在 irb 中按照你想要的方式工作,你可以将 address 定义为 class 方法

def self.address 
  p "address" 
end 

那么missing_method就不会发现它是Object的实例方法,但是你仍然可以像全局function一样调用address

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM