Как изменить свойства объекта Matlab - PullRequest
23 голосов
/ 07 ноября 2008

Я создал класс MATLAB, что-то вроде:

classdef myclass

  properties
      x_array = [];
  end

  methods
    function increment(obj,value)
       obj.x_array = [obj.x_array ; value);
    end
  end
end

Проблема в том, что свойство x_array никогда не изменяется при вызове функции increment(): например:

>>s = myclass
>>increment(s,5)

>>s.x_array
ans = []

Я провел некоторое исследование и пришел к выводу, что это из-за того, что MATLAB, использующий Lazy Copy для объектов, заставив мой класс наследовать класс HANDLE, должен был решить эту проблему, но это не так, кто-нибудь знает, почему это происходит ? И если расширение класса дескриптора является независимым решением, разве это не правильный способ сделать это:

classdef myclass < handle

или есть какие-то дополнительные шаги?

Ответы [ 2 ]

24 голосов
/ 07 ноября 2008

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

Быстрый пример

Содержимое файла myclass.m

classdef myclass<handle
    properties
        x_array = []
    end
    methods
        function obj=increment(obj,val)
            obj.x_array=[obj.x_array val];
        end
    end
end

Теперь из командной строки Matlab вы можете сделать следующее

>> s=myclass;
>> s.increment(5)
>> s.increment(6)
>> s

s = 

myclass handle

properties:
    x_array: [5 6]

lists of methods, events, superclasses
0 голосов
/ 08 сентября 2016

Есть более простой способ. Вам нужно только перезаписать исходный экземпляр s следующим образом:

s= s.x_array

Больше информации здесь: http://uk.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html#bslvcv1

PS: Хотя можно использовать handle , но функция копирования работает иначе, и вы должны быть осторожны с ее использованием. Когда вы используете handle , фактически вы создаете новый адрес / ссылку на объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...