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コードは、基本的に後者を呼び出します。