gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/@tall/lazyValidate.m
function varargout = lazyValidate(varargin) %lazyValidate Deferred argument validation using predicate. % [TX1,TX2,...] = lazyValidate(TX1,TX2,...,{PREDICATE,ARGS...}) checks that % PREDICATE(X1,X2) returns TRUE, otherwise error(message(ARGS...)) is thrown. % Copyright 2016 The MathWorks, Inc. dataArgs = varargin(1:end-1); % It's a mistake not to capture all the outputs nargoutchk(numel(dataArgs), numel(dataArgs)); predicateAndArgs = varargin{end}; % Ensure that lazyValidate does not appear in the error stack. fh = @(varargin) iLazyValidate(varargin, predicateAndArgs{:}); fh = matlab.bigdata.internal.FunctionHandle(fh, 'NumIgnoredStackFrames', 1); [varargout{1:nargout}] = elementfun(fh, dataArgs{:}); % Since we know the elementfun didn't change anything about the values, we can % simply copy the adaptors across for tall inputs isInputTall = cellfun(@istall, dataArgs); varargout(isInputTall) = cellfun(@iCopyAdaptor, varargout(isInputTall), dataArgs(isInputTall), ... 'UniformOutput', false); % Non-tall inputs we should hand back unmodified. varargout(~isInputTall) = dataArgs(~isInputTall); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function x = iCopyAdaptor(x, arg) x.Adaptor = arg.Adaptor; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function varargout = iLazyValidate(xCell, pred, varargin) if ~pred(xCell{:}) error(message(varargin{:})); end varargout = xCell; end