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