Я возился с рубином и opengl для развлекательных целей, и я решил написать несколько 3D-векторных/плоскостных/и т. Д. Классов, чтобы доработать некоторые из математики.ruby operator overloading question
упрощенный пример:
class Vec3
attr_accessor :x,:y,:z
def *(a)
if a.is_a?(Numeric) #multiply by scalar
return Vec3.new(@x*a, @y*a, @z*a)
elsif a.is_a?(Vec3) #dot product
return @x*a.x + @y*a.y + @z*a.z
end
end
end
v1 = Vec3.new(1,1,1)
v2 = v1*5 #produces [5,5,5]
, который все хорошо и денди, но я также хочу, чтобы иметь возможность написать
v2 = 5*v1
, который требует добавления функциональности в Fixnum или Float или любой другой, но я не мог 't найти способ перегрузить или расширить умножение fixnum, не заменяя его полностью. возможно ли это в рубине? какие-нибудь советы?
(очевидно, я могу просто написать все мои умножений в правильном порядке, если мне нужно)
Только для th e, измените '@ x * s, @ y * s, @ z * s' на' @ x * a, @ y * a, @ z * a', иначе ваш код будет сломан. –
спасибо, скопированный код из 2-х мест сразу><должен быть исправлен – 2009-12-06 12:01:36