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