在 Ruby 中,为什么别名 `method_missing` 不足以捕获对未定义方法的调用?

In Ruby, why is it not enough to alias `method_missing` to catch call to undefined methods?

当定义一个传递所有参数的虚拟方法完成这项工作时,这似乎更加出乎意料。即以下作品:

  def method_missing(ago, *lokatoj, &bloko)
    mistrafe(ago, *lokatoj, &bloko)
  end

  def mistrafe(ago, *lokatoj, &bloko)
    # faru ion
  end

而下面的不是

alias mistrafe method_missing

为什么会这样?

一般来说,您希望 method_missing(由 Ruby 内部调用)作为 mistrafe 的别名,反之亦然。您在 mistrafe 中有一个实现,您希望重新分配 method_missing 来调用它。

也就是说,下面的方法会起作用:

alias method_missing mistrafe

参见alias documentation