2013-08-08 3 views
3

Что касается объекта в MATLAB, можно ли вызвать статическую функцию того же типа, не зная охватывающего пакета? Прямо сейчас, единственный способ, которым я нашел ссылку, это использовать Package.Whatever.staticfunction(), но я хотел бы правильно инкапсулировать класс, если он работает независимо от того, в каком пакете он находится.Ссылка на статические функции в Matlab

Решение, которое я нашел правильно теперь есть:

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 

но это кажется неуклюжим, медленным и неправильным. Есть ли лучший способ сделать это?

ответ

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! 
+1

Это решение действительно странный язык, но, похоже, это сработало, спасибо! – kevmo314

Смежные вопросы