2008-11-07 20 views
21

que he creado una clase de MATLAB, algo así como:Cómo modificar las propiedades de un objeto Matlab

classdef myclass 

    properties 
     x_array = []; 
    end 

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

El problema es, la propiedad x_array no se modifica cuando invoco la increment() función: ejemplo:

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

>>s.x_array 
ans = [] 

hice algunas investigaciones, y llegué a la conclusión de que esto es debido a MATLAB usando Lazy Copia de objetos, por lo que mi clase hereda la clase MANGO debería haber resuelto este, pero no fue así, ¿alguien sabe por qué esto es happen ¿Ning? Y si se extiende la clase mango está indeen la solución, no es esta la forma correcta de hacerlo:

classdef myclass < handle 

o hay ningún paso adicional?

+0

casi un duplicado a http://stackoverflow.com/questions/209005/object-oriented-matlab-properties – Azim

Respuesta

22

Esto es similar a this question. 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 la línea de comandos del 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 
-1

hay una manera más fácil. Sólo es necesario sobrescribir la instancia inicial s de la 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 es muy bien utilizar mango, la función de modo de copia funciona es diferente y usted debe tener cuidado con la forma en que lo usa. Cuando usa manejar, de hecho está haciendo una nueva dirección/referencia a un obj

Cuestiones relacionadas