Tôi đã được rối tung xung quanh với ruby và opengl cho các mục đích giải trí, và tôi quyết định viết một số 3d vector/máy bay/etc lớp học để khá lên một số toán học.ruby câu hỏi quá tải điều hành
đơn giản hóa ví dụ:
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]
mà tất cả tiền phạt và dandy, nhưng tôi cũng muốn để có thể viết
v2 = 5*v1
mà đòi hỏi phải bổ sung thêm chức năng để Fixnum hoặc nổi hoặc bất cứ điều gì, nhưng tôi couldn không tìm cách để quá tải hoặc mở rộng phép nhân của fixnum mà không thay thế nó hoàn toàn. điều này có thể xảy ra trong ruby không? bất kỳ lời khuyên nào?
(rõ ràng là tôi chỉ có thể viết tất cả các phép nhân của tôi theo đúng thứ tự nếu tôi cần phải)
Chỉ dành cho th e record, thay đổi '@ x * s, @ y * s, @ z * s' thành' @ x * a, @ y * a, @ z * a', nếu không mã của bạn bị hỏng. –
cảm ơn, sao chép mã từ 2 địa điểm cùng một lúc>