matlab properties matlab-class

Cómo modificar las propiedades de un objeto Matlab



properties matlab-class (2)

Esto es similar a esta pregunta . En resumen, todo lo que debe hacer es heredar de la clase de control.

Ejemplo rápido

Contenido del archivo 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

Ahora, desde el símbolo del sistema de Matlab, puede hacer lo siguiente

>> s=myclass; >> s.increment(5) >> s.increment(6) >> s s = myclass handle properties: x_array: [5 6] lists of methods, events, superclasses

Creé una clase MATLAB, algo así como:

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

El problema es que la propiedad x_array nunca se modifica cuando invoco la función increment() : ex:

>>s = myclass >>increment(s,5) >>s.x_array ans = []

Investigué un poco, y llegué a la conclusión de que esto se debe a que MATLAB usó Lazy Copy para objetos, haciendo que mi clase herede la clase HANDLE debería haber resuelto esto, pero no fue así, ¿alguien sabe por qué está sucediendo esto? Y si ampliar la clase de control es indein la solución, ¿no es esta la manera correcta de hacerlo?

classdef myclass < handle

o hay algún paso extra?


Hay una manera más fácil. Solo necesita sobrescribir sus instancias iniciales de s siguiente manera:

s= s.x_array

Más información aquí: http://uk.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html#bslvcv1

PD: Si bien está bien usar el identificador , la función de copiado funciona de manera diferente y debes tener cuidado con la forma en que la usas. Cuando usa handle , de hecho está haciendo una nueva dirección / referencia a un obj