he estado jugando con ruby y opengl para fines de entretenimiento, y decidí escribir algunas clases vector/avión/etc 3d para algunas de las matemáticas.pregunta de sobrecarga del operador de rubí
ejemplo simplificado:
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]
el que todo lo fino y elegante, pero también quiero ser capaz de escribir
v2 = 5*v1
la que exige agregar funcionalidad a Fixnum o flotar o lo que sea, pero yo no podía No encuentra una forma de sobrecargar o extender la multiplicación de Fixnum sin reemplazarlo por completo. ¿Es esto posible en ruby? ¿algun consejo?
(obviamente sólo puedo escribir todas mis multiplicaciones en el orden correcto si tengo que)
Solo para th e grabar, cambie '@ x * s, @ y * s, @ z * s' a' @ x * a, @ y * a, @ z * a'; de lo contrario, su código estará roto. –
gracias, código copiado de 2 lugares a la vez>