FalseClassのメソッドルックアップチェーンを理解しようとしています。FalseClassには祖先のオブジェクトがあるので、new
メソッドにもアクセスできるべきではありませんか?
new
ルックアップから除外されましたか?それとも私は継承を誤解していますか?
FalseClassのメソッドルックアップチェーンを理解しようとしています。FalseClassには祖先のオブジェクトがあるので、new
メソッドにもアクセスできるべきではありませんか?
new
ルックアップから除外されましたか?それとも私は継承を誤解していますか?
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
特に未定義です。
Module#remove_method
およびを参照してくださいModule#undef_method
。@Dave Newtonの回答のCコードは、基本的に後者を呼び出します。