仅出于学习目的,我试图覆盖Ruby +方法,但未获得所需的输出。
class Integer
def +(my_num)
"Plus method overridden"
end
end
puts 5.+(9)
请让我知道我在这里做错了。
答案 0 :(得分:4)
似乎您使用的是ruby <2.4。如果是这样,则您要修补Fixnum
而不是Integer
。请注意,系统本身也会使用数字。
class Fixnum
alias_method :add, :+
def +(other)
puts 'plus method overridden'
add(other)
end
end
puts 5 + 9
答案 1 :(得分:0)
Ruby Language Specification允许Integer
具有特定于实现的子类。参见15.2.8.1,第27-33行。
看起来您的实现确实具有此类子类。在这种情况下,+
方法可能会在子类中被覆盖。
我最好的猜测是,您有一个区分Fixnum
和Bignum
的实现,而我们的Integer#+
被Fixnum#+
覆盖了。
顺便说一句,即使您试图做的事情奏效,也不会被覆盖覆盖,会被覆盖。
还请注意,如果您尝试做的事情奏效了,则很有可能会破坏Ruby进程,因为Integer
是Ruby的基础知识,在整个Ruby领域中广泛使用。