Ссылка на статические функции в 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!