आप गतिशील गुण जोड़ने जैसे तरीकों को जोड़ नहीं सकते हैं। हालांकि, विकास के दौरान नई विधियों को लागू करने के दो तरीके हैं जिनके लिए आपको हर बार डेटा को फिर से लोड करने की आवश्यकता नहीं होगी।
(1) मैं मानक कार्यों को अलग-अलग कार्यों के रूप में लिखता हूं, और उन्हें विकास के दौरान myMethod(obj)
के रूप में कॉल करता हूं। एक बार मुझे यकीन है कि वे स्थिर हैं, मैं कक्षा हस्ताक्षर फ़ाइल में अपना हस्ताक्षर जोड़ता हूं - इसके लिए clear classes
की आवश्यकता होती है, लेकिन यह बहुत देर हो चुकी है, और समय-समय पर आपको मैटलैब को बंद करना पड़ सकता है, वैसे भी ।
(2) सेट/प्राप्त विधियों के साथ, चीज़ें थोड़ा सा ट्रिकियर हैं। यदि आप नई गुण जोड़ने के लिए dynamicprops
का उपयोग कर रहे हैं, तो आप उनके सेट/प्राप्त विधियों को भी निर्दिष्ट कर सकते हैं, हालांकि (संभवतः, ये विधियां/फ़ंक्शंस संपत्ति का नाम प्राप्त करना चाहेंगे ताकि वे जान सकें कि क्या संदर्भित किया जाए):
addprop(obj,'new_prop');
prop = findprop(obj,'new_prop');
prop.SetMethod = @(obj,val)yourCustomSetMethod(obj,val,'new_prop')
संपादित
(2,1) यहाँ कैसे की दुकान और परिणाम लाने के लिए एक छिपा संपत्ति (jmlopez' answer के आधार पर) स्थापित करने के लिए का एक उदाहरण है। जाहिर है इस एक बहुत सुधार किया जा सकता है अगर आप एक बेहतर विचार क्या आप वास्तव में
classdef myDynamicClass < dynamicprops
properties (Hidden)
name %# class name
store %# structure that stores the values of the dynamic properties
end
methods
function self = myDynamicClass(clsname, varargin)
% self = myDynamicClass(clsname, propname, type)
% here type is a handle to a basic datatype.
self.name_ = clsname;
for i=1:2:length(varargin)
key = varargin{i};
addprop(self, key);
prop = findprop(self, key);
prop.SetMethod = @(obj,val)myDynamicClass.setMethod(obj,val,key);
prop.GetMethod = @(obj)myDynamicClass.getMethod(obj,key);
end
end
function out = classname(self)
out = self.name_;
end
end
methods (Static, Hidden) %# you may want to put these in a separate fcn instead
function setMethod(self,val,key)
%# have a generic test, for example, force nonempty double
validateattributes(val,{'double'},{'nonempty'}); %# will error if not double or if empty
%# store
self.store.(key) = val;
end
function val = getMethod(self,key)
%# check whether the property exists already, return NaN otherwise
%# could also use this to load from file if the data is not supposed to be loaded on construction
if isfield(self.store,key)
val = self.store.(key);
else
val = NaN;
end
end
end
end
जब तक आप कक्षाओं को बाद में स्पष्ट करते हैं, तब तक आप नई विधियां जोड़ सकते हैं, लेकिन आप इसके आसपास जाना चाहते हैं। मुझे नहीं लगता कि सामान्य रूप से काम करेगा। –