我试图了解 FalseClass 的方法查找链。由于 FalseClass 具有 Object 作为祖先,它不应该也可以访问该new
方法吗?
是否new
已从查找中排除?还是我误解了继承?
我试图了解 FalseClass 的方法查找链。由于 FalseClass 具有 Object 作为祖先,它不应该也可以访问该new
方法吗?
是否new
已从查找中排除?还是我误解了继承?
只有一个FalseClass
; 会有什么价值new
?
要回答您的问题,来自object.c
:
rb_cFalseClass = rb_define_class("FalseClass", rb_cObject);
rb_define_method(rb_cFalseClass, "to_s", false_to_s, 0);
rb_define_method(rb_cFalseClass, "&", false_and, 1);
rb_define_method(rb_cFalseClass, "|", false_or, 1);
rb_define_method(rb_cFalseClass, "^", false_xor, 1);
rb_undef_alloc_func(rb_cFalseClass);
rb_undef_method(CLASS_OF(rb_cFalseClass), "new");
new
具体是未定义的。
见Module#remove_method
和Module#undef_method
。@Dave Newton 的答案中的 C 代码基本上只是调用后者。