通过参考MatLab传递

时间:2015-05-14 15:10:56

标签: matlab scope

我正在使用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

2 个答案:

答案 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也已更新。