Для библиотеки геометрии, которую я пишу, я хочу поддерживать умножение векторов на скаляры, что достаточно просто сделать для 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
Мне интересно, есть ли лучший способ сделать это, или есть потенциальные проблемы с этим?