我是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.仅仅因为它们被命名相同并不意味着它们都具有相同的价值.
例如,当您调用test1from时test,存储在变量Ain中的值将test被复制到变量A中test1.当test1修改本地副本A,价值A的test不变.要更新Ain test的值,test1必须将返回值复制到它.