对于MATLAB中的对象,是否可以在不知道包含包的情况下调用相同类型的静态函数?现在,我发现引用它的唯一方法是使用Package.Whatever.staticfunction()
,但是我希望通过让它独立于它所处的任何包来运行来正确地封装该类。
我现在找到的解决方案是:
classdef Whatever
methods(Static)
function fig = staticfunction()
...snip...
end
end
methods
function obj = Whatever()
% Call Package.Whatever.staticfunction();
eval(sprintf('%s.staticfunction();', class(obj)));
end
end
end
但这看起来很笨拙,缓慢而且不正确。有没有更好的方法呢?
答案 0 :(得分:3)
您可以简单地使用实例来调用静态方法。这看起来像是非静态方法调用,但它不是:
classdef StaticTest
methods (Static)
function doStatic()
fprintf('Static!\n');
end
end
methods
function obj = StaticTest()
obj.doStatic()
end
function obj = doNotStatic(obj)
fprintf('Not static!\n');
obj.doStatic();
end
end
end
用法:
>> x = StaticTest();
Static!
>> x.doNotStatic();
Not static!
Static!