मैं मनोरंजन प्रयोजनों के लिए रूबी और ओपनगल के साथ गड़बड़ कर रहा हूं, और मैंने कुछ गणित को सुंदर बनाने के लिए कुछ 3 डी वेक्टर/विमान/आदि कक्षाएं लिखने का फैसला किया।रूबी ऑपरेटर ओवरलोडिंग प्रश्न
सरलीकृत उदाहरण:
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]
जो सब ठीक और dandy, लेकिन मैं भी
v2 = 5*v1
जो Fixnum में कार्यक्षमता जोड़ने की आवश्यकता है लिख सकते हैं या फ्लोट या जो कुछ भी करने में सक्षम होना चाहते हैं, लेकिन मैं नहीं कर सके इसे पूरी तरह से बदले बिना फिक्सम के गुणा को ओवरलोड या विस्तारित करने का कोई तरीका नहीं है। क्या यह रूबी में संभव है? कोई सुझाव?
(जाहिर है मैं सिर्फ सही क्रम में अपने सभी गुणा अगर मैं करने की जरूरत है लिख सकते हैं)
के बराबर है ई रिकॉर्ड, '@ x * s, @ y * s, @ z * s' से '@ x * a, @ y * a, @ z * a' में बदलें, अन्यथा आपका कोड टूटा हुआ है। –
धन्यवाद, एक ही समय में 2 स्थानों से कोड कॉपी किया गया है <<अब तय किया जाना चाहिए –