2

我试图了解 FalseClass 的方法查找链。由于 FalseClass 具有 Object 作为祖先,它不应该也可以访问该new方法吗?

是否new已从查找中排除?还是我误解了继承?

4

2 回答 2

4

只有一个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具体是未定义的。

于 2013-01-21T20:14:59.833 回答
1

Module#remove_methodModule#undef_method。@Dave Newton 的答案中的 C 代码基本上只是调用后者。

于 2013-01-21T23:35:22.883 回答