2011-12-14 10 views
7

मेरे पास एक मॉड्यूल है जो दो समान वर्गों में शामिल होना है। दोनों कक्षाओं के समान उपयोग के लिए मॉड्यूल में शामिल करने के कुछ तरीकों को एक नया उदाहरण लौटाता है।रूबी इंस्टेंस विधि से स्वयं का एक नया उदाहरण कैसे वापस करें

लेकिन मॉड्यूल में कैसे एन्कोड करना है कि युक्त वर्ग के निर्माता को कॉल किया जाना चाहिए?

एक सरल उदाहरण:

module Point3D 
    def initialize(x,y,z) 
    @x = x 
    @y = y 
    @z = z 
    end 

    def * (scalar) 
    <myclass>.new(@x * scalar, @y * scalar, @z * scalar) 
    end 
end 

class Vertex 
    include Point3D 
end 

class Vector 
    include Point3D 
end 
* मैं कैसे निर्माता कहेंगे की परिभाषा में

तो इस तरह के शीर्ष वर्ग के संदर्भ में यह एक नया वर्टेक्स और वेक्टर वर्ग के संदर्भ में लौट आए हैं कि यह प्रत्येक वर्ग में ऐसी सभी विधियों को फिर से शुरू किए बिना एक नया वेक्टर लौटा दिया?

उत्तर

12

आप ओबीजे की कक्षा प्राप्त करने के लिए 'कक्षा' विधि को कॉल कर सकते हैं।

इस मामले के लिए, यह वर्ग जहां मॉड्यूल शामिल किया गया है की वस्तु प्राप्त करने के लिए

def * (scalar) 
    self.class.new(...) 
end 
+1

आह आदमी .. आप मुझे सेकंड से हराते हैं। : @ –

3

उपयोग self.class है।

संबंधित मुद्दे