www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcfoundation/@propertycollection/subsref.m
function varargout = subsref(obj,S) %SUBSREF subs reference for MBCFOUNDATION.PROPERTIESCOLLECTION objects % % Value = OPT.Property % % See also MBCFOUNDATION.PROPERTIESCOLLECTION/SUBSASGN % Copyright 2006-2009 The MathWorks, Inc. if ~isscalar(obj) error(message('mbc:mbcfoundation:propertycollection:InvalidObject', class( obj ))); end if ~strcmp(S(1).type,'.') error(message('mbc:mbcfoundation:propertycollection:InvalidArgument')); end nSubs = length(S); i = 1; doNext = true; while doNext doNext = false; try p = pGetInternalProp(obj,S(i).subs); % get property from propertyinterface v = p.getprop( obj.Object , obj.Converter); if i<nSubs && strcmp(S(i+1).type,'.') && isa(v,'mbcfoundation.propertycollection') % do another loop obj = v; doNext = true; elseif nSubs>i % subsref into property varargout{1}= subsref(v,S(i+1:end)); else % finished varargout{1} = v; end catch % either builtin property or method [varargout{1:nargout}] = iEvalMethod(obj,S(i:end)); end i = i+1; end if ~isempty(varargout) varargout{1} = postsubsref(obj,varargout{1}); end function varargout = iEvalMethod(obj,S) % call function if length(S)==1 % no extra arguments [varargout{1:nargout}] = obj.(S(1).subs); elseif length(S)==2 && strcmp(S(2).type,'()') % Extras arguments for function call % obj.method(FunctionArgs); Args = S(2).subs; [varargout{1:nargout}] = obj.(S(1).subs)(Args{:}); else [varargout{1:nargout}] = subsref(obj.(S(1).subs),S(2:end)); end