3

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

但这似乎笨拙,缓慢且不正确。有更好的方法吗?

4

1 回答 1

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!
于 2013-08-08T15:28:27.457 回答