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