我正在使用matlab中的GUI,我使用名为top
的变量来存储所有内容。我有一个更新功能,在一个区域更新其他区域,但我不喜欢它将我的top
变量放入其中,但我无法找到一种方法来通过引用top变量,以便它仍然可以改变需要变异的内容。
matlab中是否有引用或某些等效内容?
编辑:
例如,我想将此功能移至top
无法访问的位置,但如果我要通过top
,则需要当前top
才能执行此任务。对此文件的引用我仍然可以访问top
:
function update_Screens_Callback(~,~)
% Look to see if each check box is marked and if it is add it to seen.
seen = [];
for i=1:10
top.screens{i}.Visible='off';
end
for i=1:4
if(top.sets{i,1}.Value==top.sets{i,1}.Max)
seen = [seen i];
end
end
for i=1:6
if(top.sets{i,2}.Value==top.sets{i,2}.Max)
seen = [seen,i+4];
end
end
tmp = size(seen);
tmp = tmp(2);
sizes = getSizes(tmp);
for i=1:tmp
index = seen(i);
top.screens{index}.Visible = 'on';
top.screens{index}.Position = sizes{i};
end
end
答案 0 :(得分:2)
一般来说,MATLAB中的函数调用按值传递参数,但有一个例外,即内部优化有效地导致通过引用传递。当函数返回一个参数时 - 例如一个大矩阵 - 如
function top = updategui(top)
top(42, 42) = 42;
end
和如果您将参数作为调用的一部分分配为x = updategui(x);
,MATLAB将认识到复制top
是不必要的并且将通过top
参考
然而,我并不认为"通过引用"将帮助您解决您的具体问题。您的大部分问题听起来与范围相关,而不是通过引用与值之间的抽象或传递。例如,通常的做法是通过setappdata
在GUI组件之间共享变量。
答案 1 :(得分:1)
这种行为可以在面向对象的matlab中实现。只需从handle创建一个对象作为子类。 (这里有一些documentation)
classdef myHelper < handle
properties
x
end
end
然后您可以像:
一样使用它a = myHelper
a.x = important_data
并提供所有功能。
例如:
a = myHelper
a.x = 1
b = a
b.x = 2
a.x
您会看到a
也已更新。