如果我取消定义类上的所有实例方法,则会收到以下警告:
warning: undefining `object_id' may cause serious problems
warning: undefining `__send__' may cause serious problems
这可能导致“严重问题”的一些例子?
(特别是,我也很好奇这是否对垃圾收集有任何影响?)
答案 0 :(得分:4)
简而言之,这些方法用于元目的(例如错误报告)以及普通用途,因此它们比其他方法更重要。
当出现问题时,Ruby会发回错误消息并进行回溯。默认情况下,错误消息显示对违规对象的检查。除了少数特殊类String
和Numeric
之外,检查会显示对象ID。为了正确显示错误消息,定义object_id
是必不可少的。如果未定义,则错误显示例程本身会引发错误,需要显示该错误,从而导致无法报告的无限循环。在这种情况下,你无法分辨出什么问题。这很严重。
__send__
也许可以这么说。对于大多数类来说,它是send
的基础,对于向对象发送指令至关重要。