Rubyのソースコードでもっと勉強しようと思っています。Rubyソースを変更する - メソッドを変更できない
ソースからRubyをコンパイルすると、メソッド定義に加えた変更を認識していないようです。しかし、新しいメソッドを追加すると、文字列に、変更されたメソッドをポイントすると、新しいメソッドは期待通りに機能します。
# string.c
static VALUE
rb_str_empty(VALUE str)
{
return Qtrue;
}
...
rb_define_method(rb_cString, "empty?", rb_str_empty, 0);
rb_define_method(rb_cString, "my_empty?", rb_str_empty, 0);
その後のRubyコンソールでは、我々は新しいメソッドが新しい定義を反映していることがわかりますが、方法が変更されていないかのように古い方法はまだ動作します。
$ irb
> "sdf".my_empty?
true
> "sdf".empty?
false
元のメソッド定義を「保護する」方法は?変更を登録するにはどうすればよいですか?
以下の@mattによる答えは、同じプロパティを示しています。ここでは、 asdf ".send(:empty?)#=> true'。 –