2008-10-29 20 views
5

क्या एक इनपुट के साथ एक कन्स्ट्रक्टर जोड़ने और स्पष्ट रूप से इसकी गुणों की प्रतिलिपि बनाने के अलावा एक हैंडल व्युत्पन्न कक्षा के लिए मैटलैब के लिए प्रतिलिपि बनाने के लिए एक बेहतर तरीका है?मैटलैब कॉपी कन्स्ट्रक्टर

obj.property1 = from.property1; 
obj.property2 = from.property2; 

आदि

धन्यवाद, दानी

+0

क्या आप विस्तृत कर सकते हैं? एमएटीएलएबी का कौन सा वर्जन इस्तेमाल किया जा रहा है? – Azim

+0

मैं मैटलैब 2008 ए का उपयोग कर रहा हूं और मैं ज्यादातर संदर्भों से कक्षाओं का उपयोग करता हूं (इस प्रकार हैंडल से प्राप्त होता है) लेकिन मुझे कभी-कभी उन्हें मूल्य से पास करने की आवश्यकता होती है, उदा। classdef अनुरोध <संभाल गुण कीमत मात्रा अंत अंत – Dani

+0

RequestManager classdef < गुण requestsHistory अंत तरीकों समारोह HandleRequest (यह अनुरोध) this.requestsHistory = [this.requestsHistory अनुरोध] संभाल; अंत अंत अंत – Dani

उत्तर

8

आप एक त्वरित और गंदे समाधान मानता है कि सभी गुण कॉपी किया जा सकता चाहते हैं, गुण समारोह पर एक नज़र डालें। यहां कक्षा का एक उदाहरण है कि स्वचालित रूप से प्रतियां सभी गुण:

classdef Foo < handle 
    properties 
    a = 1; 
    end 
    methods 
    function F=Foo(rhs) 
     if nargin==0 
     % default constructor 
     F.a = rand(1); 
     else 
     % copy constructor 
     fns = properties(rhs); 
     for i=1:length(fns) 
      F.(fns{i}) = rhs.(fns{i}); 
     end 
     end 
    end 
    end 
end 

और कुछ परीक्षण कोड:

f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value. 
+3

कन्स्ट्रक्टर में, आपको शायद यह जांचना चाहिए कि "rhs" गुणों की प्रतिलिपि बनाने से पहले Foo (isa (rhs, 'foo') प्रकार है। – Marc

2

तुम भी उपयोग कर सकते हैं

try 
F.(fns{i}) = rhs.(fns{i}); 
end 

जो विधि और अधिक उपयोगी

बनाता है
8

matlab.mixin.Copyable का उपयोग कर हैंडल ऑब्जेक्ट्स की प्रतियां बनाने का एक और आसान तरीका है। यदि आप इस कक्षा से उत्तराधिकारी हैं तो आपको एक प्रतिलिपि विधि मिल जाएगी जो आपके लिए सभी संपत्तियों की प्रतिलिपि बनायेगी।

classdef YourClass < matlab.mixin.Copyable 
... 

a = YourClass; 
b = copy(a); % b is a copy of a 

यह प्रति विधि रचनाकारों को कॉल किए बिना या गुणों के कार्यों को सेट किए बिना एक प्रतिलिपि बनाता है। तो यह तेजी से होना चाहिए। आप कुछ विधियों को ओवरराइड करके प्रतिलिपि व्यवहार को भी अनुकूलित कर सकते हैं।

+0

क्या होगा यदि आप उप-वर्ग की प्रतिलिपि बनाना चाहते हैं, यानी यदि कोई आपके क्लास के कुछ उप-वर्ग का उदाहरण है, लेकिन आप चाहते हैं कि उप-वर्ग न हो (यानी आप सुपर-क्लास (YourClass) कार्यक्षमता चाहते हैं)? –

+0

आपको ऐसा करने के लिए अपनी विधि लिखनी होगी। – Navan

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