Ruby 是否可以覆盖接收器行为?

Ruby 是否可以覆盖接收器行为?,ruby,Ruby,假设我有一门课是这样的: class User def initialize(name, id) @name = name @id = id end def name @name end def id @id end end 在这种情况下,如果我用u=user.new(“Joe”,5)初始化用户,调用u.name将返回“Joe”。但是如果我调用一个未知的方法,例如User.location,我将得到一个NoSuchMethodEx

假设我有一门课是这样的:

class User
  def initialize(name, id)
     @name = name
     @id = id
  end

  def name
    @name
  end

  def id
    @id
  end
end
在这种情况下,如果我用
u=user.new(“Joe”,5)
初始化用户,调用
u.name
将返回
“Joe”
。但是如果我调用一个未知的方法,例如
User.location
,我将得到一个
NoSuchMethodException

是否有方法重写接收方行为或
User
类,以便在调用
User.location
时,它只返回一个
nil


我尝试了monkeypatch
send
方法,但该方法仅在调用
User.send:location
时有效

答案似乎包括覆盖类的
方法\u missing
方法。正如一位评论者所说,你可以这样做

def method_missing(method_name, *args)
  nil
end

这里有更多信息:.

def method\u缺失(method\u name,*args);结束
就可以了。现在,任何不存在的方法都将返回
nil
(我决不赞同这一点)@engineersmnky刚刚在你发布后5秒左右的wiki页面上发现了这一点。谢谢不,那根本不是我说的。如果我见过的话,你发布的是堆栈级错误
method\u missing
将捕获一个
NoMethodError
并尝试处理它,但您正在通过再次调用相同的方法来处理它,这现在只是一个恶性循环,直到程序崩溃。我意识到了我的错误,我不知道为什么irb在编辑这篇文章时没有捕获到它。我会在今天编辑它。