我为了娱乐而尝试使用 Ruby 和 OpenGL,决定编写一些 3D 向量/平面等类来优化数学代码。
简单示例:
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等对象上添加功能,但是我无法找到一种方法来重载或扩展fixnum的乘法而不完全替换它。在Ruby中是否有可能实现这一点?有什么建议吗?
(显然,如果需要,我可以按正确顺序编写所有乘法)
@x*s, @y*s, @z*s
更改为@x*a, @y*a, @z*a
,否则你的代码会出错。 - Chris Lutz