私が書いているジオメトリ ライブラリでは、スカラーによるベクトルの乗算をサポートしたいと考えています。これは、メソッドvector * scalar
を定義するだけで簡単に実行できます。Vector#*
ただし、scalar * vector
すべてのFixnum#*
、Bignum#*
およびFloat#*
メソッドをサポートするには、モンキー パッチを適用する必要があります。それを達成するために、これらの各クラスに次のコードを使用しています。
class Fixnum
old_times = instance_method(:'*')
define_method(:'*') do |other|
case other
when Geom3d::Vector
Geom3d::Vector.new(self * other.dx, self * other.dy, self * other.dz)
else
old_times.bind(self).(other)
end
end
end
class Bignum
#...
end
class Float
#...
end
これを達成するためのより良い方法があるかどうか、またはこれを行う際に潜在的な問題があるかどうか疑問に思っていますか?