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

时间:2018-07-03 07:57:32

标签: ruby metaprogramming alias

在定义一个传递所有参数的伪方法来完成这项工作时,这似乎更加出乎意料。那是下面的作品:

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

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

以下内容没有

alias mistrafe method_missing

为什么会这样?

1 个答案:

答案 0 :(得分:4)

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

也就是说,以下方法将起作用:

alias method_missing mistrafe

请参见alias documentation