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?
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
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