【问题标题】:ruby irb call Fixnum#+ every time the enter was hit?每次输入被击中时,ruby irb 调用 Fixnum#+?
【发布时间】:2013-09-23 17:09:37
【问题描述】:
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 对象可以调用函数 :+。有人知道为什么会这样吗?

提前致谢。

【问题讨论】:

  • 在你的+方法中调用raise,你会得到一个很好的回溯。

标签: ruby irb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多