【发布时间】:2013-03-09 13:54:57
【问题描述】:
我在代码中按照以下方式对全局变量进行操作。我想将每次保存到全局变量并保留其内容以便扩展。如果我声明函数的输出是这个变量,如果结构很大,我假设它可能会显着减慢。怎么做?
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
【问题讨论】:
-
函数f_up的作用是什么?我看不到 n1 在您的函数中被操纵的位置。此外,matlab 是
call by value,这意味着 arg1 和 arg2 在函数调用期间被复制,并且您对 arg1 的操作不会影响您在函数调用中用作参数的对象。也许你应该澄清你的问题? -
啊,好的。如果变量 f_up, 是全局的,我认为您不必传递它。所以简单地写
n1 = [ n1 arg2 ]就可以了。 (不过,我从未在 matlab 中尝试过。)但是,请尽量避免它。这个问题和你的一样,很好回答:stackoverflow.com/questions/4137905/… -
这个问题和你的一样,很好回答:stackoverflow.com/questions/4137905/…
-
谢谢,我没找到。这个解决方案有效,我意识到它不是最佳的:)
-
@Konstantin 如果我没记错的话,Matlab 使用了一种叫做写时复制的东西。这意味着 Matlab 不会复制任何传递的变量,除非您对其进行修改。在
f_up中,这意味着arg 1被复制,而不是arg2。
标签: matlab parameters global-variables