我是C新手,想通過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
Ruby如何「保護」原始方法定義?我怎樣才能讓我的更改註冊?
除了是一個非常深入和完全正確的解釋,@matt下面的答案說明了同一個屬性,他在那裏顯示''「 asdf「.send(:空?)#=> true'。 –