Ссылка на статические функции в Matlab

Можно ли для объекта в 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 ответ

Решение

Вы можете просто использовать экземпляр для вызова статического метода. Это похоже на вызов нестатического метода, но это не так:

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!
Другие вопросы по тегам