2012-05-09 6 views
3

Скажем, у меня есть массив объектов 1x2 класса дескриптора с помощью метода SetProperty. Могу ли я использовать arrayfun для вызова метода SetProperty для каждого класса вместе с вектором для его использования для установки значения свойства?Matlab Arrayfun с ручкой Класс

ответ

1

Да, вы можете:

arrayfun(@(x,y)x.SetProperty(y), yourHandleObjects, theValues) 
+0

Спасибо! Это прямолинейно, я понятия не имею, почему у меня так много проблем с синтаксисом. – krapht

3

Вы можете также спроектировать класс, так что вызов SetProperty будет векторизации:

class Foo < handle 
     methods(Access=public) 
      function SetProperty(this,val) 
       assert(numel(this)==numel(val)); 
       for i=1:numel(this) 
         this(i).prop = val(i); 
       end 
      end 
     end 
end 

Затем вы можете создать вектор и вызвать метод на нем непосредственно:

f = repmat(Foo(),[1 2]); 
    f.SetProperty([5 3]); 
+0

Я тоже это использовал. Однако я больше мотивирован использовать arrayfun, потому что я могу контролировать, что передается функции. Это было проблемой, когда у меня было множество вложенных классов, и я никогда не знал, будет ли я сам ссылаться на класс, который мне нужен, или на его суперкласс, от которого я и вызвал метод. – krapht

+0

@AndrewAshworth, что вы говорите, звучит интересно. Можете ли вы привести пример? (Для моих собственных целей обучения) –

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