2011-08-15 8 views
5

मान लीजिए कि मेरे पास निम्न श्रेणी है:MATLAB - सेट/एक संरचना के क्षेत्रों पर पहुंच प्राप्त करें?

classdef myClass 
    properties 
     Globals = struct(... 
      'G1', 1,  ... 
      'G2', 2  ... 
     ); 
    end 
    methods 
     % methods go here 
    end 
end 

मैं संरचना का उपयोग करता हूं क्योंकि अन्य गुण हैं जो structs हैं।

क्या संरचना के क्षेत्र के लिए एक सेटटर प्रदान करने का कोई तरीका है? निष्क्रिय रूप से

function obj = set.Globals.G1(obj, val) 
    obj.Globals.G1 = val; % for example 
end 

प्रदान नहीं करता है।

उत्तर

4

आपको संपूर्ण संरचना के लिए सेट-विधि परिभाषित करना है (नीचे देखें)। वैकल्पिक रूप से, आप "ग्लोबल्स" के लिए एक कक्षा को परिभाषित कर सकते हैं, जो अधिकांश व्यावहारिक उद्देश्यों के लिए संरचना की तरह दिखता है और महसूस करता है (सिवाय इसके कि आप फील्ड नामों को गलत नहीं कर सकते), और जो इसके गुणों के लिए अपने स्वयं के सेट/प्राप्त विधियों को कार्यान्वित कर सकता है।

function obj = set.Globals(obj,val) 

%# look up the previous value 
oldVal = obj.Globals; 

%# loop through fields to check what has changed 
fields = fieldnames(oldVal); 

for fn = fields(:)' %'# 
    %# turn cell into string for convenience 
    field2check = fn{1}; 

    if isfield(val,field2check) 
     switch field2check 
     case 'G1' 
     %# do something about G1 here 
     case 'G2' 
     %# do something about G2 here 
     otherwise 
     %# simply assign the fields you don't care about 
     obj.Globals.(field2check) = val.(field2check); 
     end 
    end 
end 
end %# function 
+0

मुझे लगता है कि यह एक तरह का है, लेकिन मुझे लगा कि मैं पूछूंगा। ग्लोबल क्लास के साथ जो मुद्दा मैं चलाता हूं, मेरे पास कई "सहकर्मी" वर्ग हैं जो सभी को ग्लोबल्स स्ट्रक्चर की आवश्यकता होती है, लेकिन उस संरचना के अंदर क्या हो सकता है। गतिशील सेटर्स/गेटर्स बनाने का कोई तरीका है? मैंने अभी गतिशील गुणों का उपयोग करने के लिए सीखा है, –

+1

@ सख्ती से 27: यदि सुपरक्लस संपत्ति को परिभाषित करता है, तो उसे सेट/प्राप्त विधियों को भी परिभाषित करना होगा। हालांकि, ये सेट/प्राप्त विधियां उदा। "setGlobal" और "getGlobal" नामक विधियों को बदले में ओवरलोड किया जा सकता है। निजी तौर पर, मैं एक समान मामले में गतिशील गुणों के साथ चला गया हूं, लेकिन अनुभव से पता चलता है कि जब तक आपको वास्तव में गतिशील गुणों की आवश्यकता नहीं होती है, तो मैटलैब कीड़े को खोजने का जोखिम नहीं लेना बेहतर होता है। – Jonas

+0

मैं गतिशील सेटर्स के साथ करना चाहता था, टाइप-चेकिंग करना था - मेरा इरादा इस ऑब्जेक्ट को स्ट्रक्चर के रूप में पेश करना है और कुछ भी नहीं .. –

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