在Matlab中引用静态函数

时间:2013-08-08 15:22:14

标签: matlab matlab-class

对于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

但这看起来很笨拙,缓慢而且不正确。有没有更好的方法呢?

1 个答案:

答案 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!