我是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'。 –