我是MATLAB的新手,我有一个简单的问题。如果我有以下结构化函数怎么办:
function[A] = test(A)
test1(A);
test2(A);
end
function test1(A)
#% do something with A
end
function test2(A)
#% do something else with the newly modified A
end
如何将A从函数传递到函数以保持其修改性质? (假设A是矩阵)
编辑:让情况变得更简单一些。假设我的主要功能是:function[a]=test(a)
test1(a);
#%test2(a);
end
和test1()
定义为:
function[a] = test1(a)
a=5;
end
然后,我使用test
调用函数test(3)
,我希望它报告ans = 5
,但仍然报告ans = 3
。
谢谢!
答案 0 :(得分:6)
MATLAB中的变量使用“按值调用”(with some exceptions)传递,因此传递给函数和修改的任何值都必须从函数返回并放在新变量或旧变量中变量被覆盖。从函数返回变量的值很简单:只需将变量名放在函数的output argument list中。
对于您的示例,您可以这样做:
function A = test(A)
A = test1(A); %# Overwrite A with value returned from test1
A = test2(A); %# Overwrite A with value returned from test2
end
function A = test1(A) %# Pass in A and return a modified A
#% Modify A
end
function A = test2(A) %# Pass in A and return a modified A
#% Modify A
end
要注意的一件事是variable scope。每个函数都有自己的工作空间来存储自己的局部变量,所以在上面的例子中实际上有3个唯一的A
变量:一个在test
的工作空间中,一个在{{1}的工作空间中在test1
的工作空间中有一个。仅仅因为它们被命名相同并不意味着它们都具有相同的价值。
例如,当您从test2
致电test1
时,test
中变量A
中存储的值将被复制到test
中的变量A
{1}}。当test1
修改其test1
的本地副本时,A
中A
的值不会更改。要更新test
中A
的值,必须将test
的返回值复制到其中。
答案 1 :(得分:3)
从函数返回对象,然后将其传递给下一个函数。