【问题标题】:Referencing Static Functions in Matlab在 Matlab 中引用静态函数
【发布时间】:2013-08-10 09:30:00
【问题描述】:

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

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

【问题讨论】:

    标签: matlab matlab-class


    【解决方案1】:

    您可以简单地使用实例来调用静态方法。这看起来像一个非静态方法调用,但它不是:

    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!
    

    【讨论】:

    • 这是一个非常奇怪的语言决定,但它看起来有效,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多