提问人:Justin k 提问时间:4/28/2015 最后编辑:Justin k 更新时间:6/4/2016 访问量:1695
如何在 Matlab 中通过引用传递参数
How to pass parameter by reference in Matlab
问:
我是matlab的初学者,在网上学习了以下问题,但在解决时遇到了困难。我有一个 1 x 20 矩阵,需要定期更新。该矩阵驻留在 Matlab 的主工作区中(如下面的代码所示)。current_load
current_loads = zeros(1, 20);
for col=1:20
current_loads(1,col)=10; %// Initially give all nodes a current value of 10
end
Object = HandleObject(current_load);%To pass by reference
recursive_remove(Object, 0);
为了通过引用传递,我创建了以下类 HandleObject.mcurrent_load
classdef HandleObject < handle
properties
Object=[];
end
methods
function obj=HandleObject(receivedObject)
obj.Object=receivedObject;
end
end
end
此矩阵将传递给函数调用(如下所示)。recursive_remove
function recursive_remove( current_load, val )
current_load.object = new matrix;
if(val<10)
current_load.object(1,3) = 2+val; %Not the correct way of using current_load ??
end
recursive_remove( current_load, current_load.object (1,3) )
end
这里的目的是修改此函数中的变量,稍后我可以从主函数中看到这些相同的更改。但是这段代码不起作用,因为我不知道如何通过引用传递。我需要通过引用传递,因为我是递归调用它而不返回 main 以使其覆盖调用者处的变量。如果可能,请举例说明。current_load
答:
0赞
Fayssal El Mofatiche
6/4/2016
#1
如果你真的需要这个功能,你可以考虑把你的 HandleObject 类变成一个 Singleton,如下所示:
classdef HandleObject < handle
properties
Object=[];
end
methods(Static)
function obj = Instance(receivedObject)
persistent uniqueInstance
try
if isempty(uniqueInstance)
obj = HandleObject(receivedObject);
uniqueInstance = obj;
else
obj = uniqueInstance;
end
catch ME
disp(ME.getReport);
end
end
end
methods
function obj=HandleObject(receivedObject)
obj.Object=receivedObject;
end
end
end
然后,您的递归函数将变得简单一些:
function recursive_remove(val )
current_load = HandleObject.Instance();
current_load.object = new matrix;
if(val<10)
current_load.object(1,3) = 2+val;
end
recursive_remove(current_load.object (1,3) )
end
若要创建 HandleObject 类的实例,请执行如下操作:
Object = HandleObject.Instance(current_load);
希望这对您有所帮助。
评论
global
evalin
current_load = recursive_remove( current_load, val );