2

FalseClassのメソッドルックアップチェーンを理解しようとしています。FalseClassには祖先のオブジェクトがあるので、newメソッドにもアクセスできるべきではありませんか?

newルックアップから除外されましたか?それとも私は継承を誤解していますか?

4

2 に答える 2

4

FalseClass;のインスタンスは1つだけです。どのような価値が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_methodおよびを参照してくださいModule#undef_method。@Dave Newtonの回答のCコードは、基本的に後者を呼び出します。

于 2013-01-21T23:35:22.883 に答える