有在用Matlab的人都應該知道Matlab中沒有Pointer的觀念,也沒有pass-by-reference的方法。剛好最近在用Matlab,迫切需要這樣的一個功能。在網路上找了半天都沒有找到一個比較好的作法。後來自己查到了Matlab的OOP的使用及operator overloading的方式。靈光一閃的想到可以利用繼承handle class及operator overloading的方式來達成十分近似的效果。就寫了一個shared.m的class。
我已經放到Matlab Central去了。有興趣的人可以去下載。基本上如果你用了這個class你可以達到下面正常Matlab變數無法做到的事情。
a = [1:100];
b = a;
a(10) = 0;
b(10) = ?? %% 這裡的b(10)仍舊會是10。不會變成0。因為Matlab把整個array copy一份。
a= shared([1:100]);
b = a;
a (10) = 0;
b(10) = ?? %% 透過shared的方式,b(10)也會變成0。
假設你一個function,修改了input的argument。
function inplace_add(a, b)
a(1) = a(1) + b(1);
end
如果你使用一般的maltab變數傳到這個function內,當function執行後,這個參數不會有任何改變。不過如果你傳的是一個shared的變數,這個參數將會被改變。
Shared Variable: http://www.mathworks.com/matlabcentral/fileexchange/24742
我已經放到Matlab Central去了。有興趣的人可以去下載。基本上如果你用了這個class你可以達到下面正常Matlab變數無法做到的事情。
a = [1:100];
b = a;
a(10) = 0;
b(10) = ?? %% 這裡的b(10)仍舊會是10。不會變成0。因為Matlab把整個array copy一份。
a= shared([1:100]);
b = a;
a (10) = 0;
b(10) = ?? %% 透過shared的方式,b(10)也會變成0。
假設你一個function,修改了input的argument。
function inplace_add(a, b)
a(1) = a(1) + b(1);
end
如果你使用一般的maltab變數傳到這個function內,當function執行後,這個參數不會有任何改變。不過如果你傳的是一個shared的變數,這個參數將會被改變。
Shared Variable: http://www.mathworks.com/matlabcentral/fileexchange/24742
留言