在类上取消定义object_id和__send__会导致什么严重问题?

时间:2013-07-22 15:13:42

标签: ruby

如果我取消定义类上的所有实例方法,则会收到以下警告:

warning: undefining `object_id' may cause serious problems
warning: undefining `__send__' may cause serious problems

这可能导致“严重问题”的一些例子?

(特别是,我也很好奇这是否对垃圾收集有任何影响?)

1 个答案:

答案 0 :(得分:4)

简而言之,这些方法用于元目的(例如错误报告)以及普通用途,因此它们比其他方法更重要。

当出现问题时,Ruby会发回错误消息并进行回溯。默认情况下,错误消息显示对违规对象的检查。除了少数特殊类StringNumeric之外,检查会显示对象ID。为了正确显示错误消息,定义object_id是必不可少的。如果未定义,则错误显示例程本身会引发错误,需要显示该错误,从而导致无法报告的无限循环。在这种情况下,你无法分辨出什么问题。这很严重。

__send__也许可以这么说。对于大多数类来说,它是send的基础,对于向对象发送指令至关重要。