0

我在代码中按照以下方式对全局变量进行操作。我想将每次保存到全局变量并保留其内容以便扩展。如果我声明函数的输出是这个变量,如果结构很大,我假设它可能会显着减慢。怎么做?

function test()

    global n1;
    n1 = [1 2 3];

    for x=1:10
%     [n1] = global_up(n1,x); % no need for output parameter, as n1 is global right?
      f_up(n1,x);
    end 
end

function f_up(arg1,arg2) %function [arg1] = f_up(arg1,arg2) is wrong?
    global n1; % need to write it in every function ?
    arg1 = [arg1 arg2];
end
4

2 回答 2

1

我真的不明白你在做什么,但全局变量几乎绝对不是要走的路。只需将变量作为参数传递:

   function test()

        n1 = [1 2 3];

        for x=1:10
          n1 = f_up(n1,x);
        end 
    end

function arg3 = f_up(arg1,arg2)
    arg3 = [arg1 arg2];
end

但是,如果您解释这段代码的要点,您可能会得到一个更好的解决方案。就目前而言,它f_up实际上并没有做任何事情(即它封装了已经非常简洁但没有任何好处的语法)

于 2013-03-20T13:12:13.030 回答
0

编辑:考虑这个问题来讨论您的实际问题:如何修改函数中的数组?

我认为你想要做的是通过引用调用,全局变量的使用是不必要的。

您有一个变量x,您想将该变量提供给一个函数,并且您希望该函数x直接对其进行操作,以便这些操作x在您的函数外部可见。

这被称为call by reference。Matlab 不支持简单变量。

但是,您可以使用从句柄类继承的对象。这将为您提供所需的行为。

如果您不想使用对象,则必须在函数中使用返回参数。不要使用全局变量,它们会使你的代码不可读并且几乎肯定会导致错误。

于 2013-03-20T13:34:34.190 回答