A struct
dans Matlab est pas techniquement un « objet » dans le sens que vous en parlez. Si je crée une structure, puis l'affecte comme un champ dans une autre structure, les deux sont maintenant découplés. Toute modification apportée à la première structure ne sera pas reflétée dans la copie que nous venons de faire.
a = struct('a', 2);
b = struct('b', a);
a.a = 3
% b.b.a == 2
Vous pouvez vraiment seulement vérifier de manière fiable que les valeurs de deux struct
s sont égaux.
Si vous voulez vraiment vérifier que les deux struct
s que vous comparez ont été créés de la même manière, vous pourrait passer par le struct
récursive et déterminer si le memory location de chaque élément est le même dans les deux struct . Cela impliquerait que la structure est à la fois et ils ont été créés avec les mêmes données sous-jacentes.
Pour une structure très simple, non imbriquée profondément, cela pourrait ressembler à ceci.
function bool = isSameStruct(A, B)
fmt = get(0, 'Format');
format debug;
memoryLocation = @(x)regexp(evalc('disp(x)'), '(?<=pr\s*=\s*)[a-z0-9]*', 'match');
if isequaln(A, B)
bool = true;
elseif ~isequal(sort(fieldnames(A)), sort(fieldnames(B)))
bool = false;
else
fields = fieldnames(A);
bool = true;
for k = 1:numel(fields)
if ~isequal(memoryLocation(A.(fields{k})), memoryLocation(B.(fields{k})))
bool = false;
break;
end
end
end
format(fmt);
end
Mise à jour
Une alternative est d'utiliser des objets réels handle
pour vos noeuds. Une classe de base ressemblerait à ceci.
classdef Node < handle
properties
Value
Children
end
methods
function self = Node(value)
self.Value = value;
end
function addChild(self, node)
self.Children = cat(2, self.Children, node)
end
end
end
J'ai raté cela. C'est pourquoi mon code de modification d'arbre ne fonctionne pas. Savez-vous comment faire quelque chose comme traverser un arbre et le modifier? Le plus proche que j'ai trouvé est le suivant: http://stackoverflow.com/questions/14793453/matlab-link-to-variable-not-variable-value – TyanTowers
@TyanTowers Pourquoi ne pas faire de vos noeuds des objets 'handle'? – Suever