将此类检查为foo.m。通过运行foo.main(),您可以恢复大部分已解决的问题。
这不是OOP中最大的优雅,但你有Matlab原样。
请记住,obj变量是MANDATORY,in和out。没有obj,没有点幻想。
最后的调用,必须包括f1。放置~不仅会丢失幻想,还会丢失对象及其数据。
除了obj处理之外,nargin | nargout | varargin | varargout仅在函数体内有效,并且通常与运行时相关。人们通常不知道你将抛出多少参数,因为它等于varargout单元的长度。
classdef foo
properties
value;
end
methods
function [obj,flag]=fun1(obj,this)
obj.value=this+1;
flag=1;
end
function [obj,flag]=fun2(obj,this)
obj.value=2*this;
flag=2;
end
function [obj,varargout]=fun3(obj,varargin)
for i=1:nargin-1
varargout{i}=varargin{i};
end
obj.value=0;
end
end
methods (Static)
function main()
if 0
%% Run this line
foo.main()
end
f1=foo();
[f1,flag]=f1.fun1(10);
flag
f1.value
f=@fun2;
%[f1,flag]=f1.f(10); % fails
flag
f1.value
[f1,flag]=f1.('fun2')(10);
flag
f1.value
[~,flag]=f1.fun2(10); % fails
flag
f1.value
[f1,a1,a2,a3,a4]=f1.fun3('x1',2,[],@(x)(x>1))
end
end
end