Как изменить свойства объекта Matlab
Я создал класс 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 ответа
Это похоже на этот вопрос. Короче, все, что вам нужно сделать, это наследовать от класса дескриптора.
Быстрый пример
Содержимое файла 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
Есть более простой способ. Вам нужно только перезаписать ваш начальный экземпляр s
следующее:
s= s.x_array
Более подробная информация здесь: http://uk.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html
PS: Несмотря на то, что можно легко использовать дескриптор, способ копирования работает иначе, и вы должны быть осторожны с его использованием. Когда вы используете дескриптор, на самом деле вы делаете новый адрес / ссылку на объект