From: KIMURA Koichi Date: 2006-01-10T11:59:12+09:00 Subject: [ruby-dev:28214] alias で別名付けできないメソッドがある? 木村です。 Regexp クラスのcompileメソッドを再定義しようとして class Regexp alias orig_compile compile end とすると、 NameError: undefined method `compile' for class `Regexp' となります(ruby 1.9.0 2006-01-05 mswin32)。 compile のほかにも escape, union, last_match, quote が同様のエラーとなります。これらの共通点を調べてみると、 rb_define_singleton_method(rb_cRegexp, "compile", rb_class_new_instance, -1); rb_define_singleton_method(rb_cRegexp, "quote", rb_reg_s_quote, -1); rb_define_singleton_method(rb_cRegexp, "escape", rb_reg_s_quote, -1); rb_define_singleton_method(rb_cRegexp, "union", rb_reg_s_union, -1); rb_define_singleton_method(rb_cRegexp, "last_match", rb_reg_s_last_match, -1); のように rb_define_singleton_method で定義されたメソッドなのですが、 他のクラスで同様に定義されているメソッドではエラーにならないものも あります(Fileクラスの atとか)。 エラーになる/ならないの境界はどこにあるのでしょうか? また、エラーになるのが正しいとしても、undefined method というのは 適切ではないと思いますがいかがでしょうか。 -- 木村浩一