在MATLAB一個struct
在技術上並不在於你在談論它意義上的「對象」。如果我創建了一個結構體,然後將它分配給另一個結構體中的一個字段,那麼這兩個結構體現在解耦。對第一個結構所做的任何更改都不會反映在我們剛剛創建的副本中。
a = struct('a', 2);
b = struct('b', a);
a.a = 3
% b.b.a == 2
你真的可以只可靠地檢查值的兩個struct
小號相等。
如果你真的想驗證,您比較兩個struct
小號都以同樣的方式創建的,你可以去通過struct
遞歸,並確定每個元素的memory location是否在這兩個結構相同。這意味着結構是相同的和它們是用相同的底層數據創建的。
對於一個非常簡單的非深度嵌套結構,這可能看起來像這樣。
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
更新
另一種方法是用實際handle
對象爲您的節點。一個基本的類將看起來像這樣。
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
我錯過了這一點。這就是爲什麼我的樹修改代碼不起作用。你知道如何做遍歷樹和修改它嗎?我發現最近的是這樣的: http://stackoverflow.com/questions/14793453/matlab-link-to-variable-not-variable-value – TyanTowers
@TyanTowers爲什麼不讓你的節點成爲實際的'handle'對象? – Suever