Comment modifier les propriétés d'un Objet Matlab

j'ai créé une classe MATLAB, quelque chose comme:

classdef myclass

  properties
      x_array = [];
  end

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

le problème est que la propriété x_array n'est jamais modifiée quand j'invoque la fonction increment() : ex:

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

>>s.x_array
ans = []

j'ai fait quelques recherches, et je suis arrivé à une conclusion que c'est à cause de L'utilisation de MATLAB Copie paresseuse pour les objets, ce qui fait que ma classe hérite de la classe HANDLE aurait dû résoudre cela, mais il ne l'a pas fait, est-ce que quelqu'un sait pourquoi cela se produit? Et si l'extension la classe de poignée est la solution, n'est-ce pas la bonne façon de le faire:

classdef myclass < handle

ou y a-t-il des étapes supplémentaires?

22
demandé sur chappjc 2008-11-07 19:27:48

2 réponses

c'est similaire à cette question . En bref, tout ce que vous devriez avoir à faire est d'hériter de la classe de poignée.

Rapide

contenu du fichier 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

maintenant à partir de L'invite de commande Matlab, vous pouvez faire ce qui suit

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

s = 

myclass handle

properties:
    x_array: [5 6]

lists of methods, events, superclasses
23
répondu Azim 2017-05-23 12:17:48

Il y a un moyen plus facile. Vous n'avez qu'à réécrire votre instance initiale s comme suit:

s= s.x_array

Plus d'informations ici: http://uk.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html#bslvcv1

PS: bien qu'il soit bon d'utiliser handle , la façon dont la fonction de copie fonctionne est différente et vous devriez faire attention à la façon dont vous l'utilisez. Lorsque vous utilisez poignée , en fait, vous faites une nouvelle adresse/référence à un obj

-1
répondu Meisam Jalalvand 2016-09-08 12:32:42