これにより、1.9.2 Ruby で SystemStackError がスローされます (ただし、Rubinius では機能します)。
class Fixnum
def +(other)
self + other * 2
end
end
しかし、 (他のエラーに基づいて) super
forはありません。+
+
元の機能にアクセスするにはどうすればよいですか?
を使用しalias_method
ます。Aliasを別Fixnum
の+
ものに変更してから、 new で参照します+
。
class Fixnum
alias_method :old_add, :+
def +(other)
self.old_add(other) * 2
end
end
もう1つの興味深いアプローチは、Fixnumのmodule_eval
メソッドにブロックを渡すことです。したがって、たとえば:
module FixnumExtend
puts '..loading FixnumExtend module'
Fixnum.module_eval do |m|
alias_method :plus, :+
alias_method :min, :-
alias_method :div, :/
alias_method :mult, :*
alias_method :modu, :%
alias_method :pow, :**
def sqrt
Math.sqrt(self)
end
end
end
これで、アプリ全体にFixnumExtendを含めた後、次のことができます。
2.plus 2
=> 4
81.sqrt
=> 9
私はこのアプローチを使用して、OCRエンジンが手書きのコードを認識できるようにしています。2.div 2
との時間はより簡単です2/2
。