我是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
Run Code Online (Sandbox Code Playgroud)
如何将A从函数传递到函数以保持其修改的性质?(假设A是矩阵)
编辑:让我们的情况变得更简单一些.假设我的主要功能是:
function[a]=test(a)
test1(a);
#%test2(a);
end
Run Code Online (Sandbox Code Playgroud)
并test1()
定义为:
function[a] = test1(a)
a=5;
end
Run Code Online (Sandbox Code Playgroud)
然后,我调用该函数test
用test(3)
,我想提出报告ans = 5
,但它仍然报告ans = 3
.
谢谢!
MATLAB中的变量使用"按值调用"(有一些例外)传递,因此传递给函数和修改的任何值都必须从函数返回,并放在新变量或旧变量中.从函数返回变量的值很简单:只需将变量名放在函数的输出参数列表中.
举个例子,你会这样做:
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
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是变量范围.每个函数都有自己的工作空间来存储自己的局部变量,因此A
在上面的例子中实际上有3个唯一变量:一个在工作区中test
,一个在工作区中test1
,一个在工作区中test2
.仅仅因为它们被命名相同并不意味着它们都具有相同的价值.
例如,当您调用test1
from时test
,存储在变量A
in中的值将test
被复制到变量A
中test1
.当test1
修改本地副本A
,价值A
的test
不变.要更新A
in test
的值,test1
必须将返回值复制到它.