ruby irb每次输入命中时都会调用Fixnum#+?

时间:2013-09-23 17:09:37

标签: ruby irb

class Fixnum
        alias :old_plus :+
        def +(value)
                puts "self is:#{self}"
                self.old_plus(value)
        end
end

如果你打开irb并按上面的方式做一个猴子补丁,那么每当你点击回车时,它会打印一些随机数字,如:

2.0.0p195 :019 >
self is:18
self is:116
self is:19
self is:17
self is:0

对我来说这很奇怪,因为只有一个Fixnum对象可以调用该函数:+。有人知道为什么会这样吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

IRB本身是用Ruby编写的,因此核心类的猴子补丁可能会像你的那样影响它。这应该告诉你,这种补丁不是一个好主意。如果您将返回值更改为其他内容,则可能会轻易破坏。