Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我对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(3)调用函数test ,我希望它报告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 要注意的一件事是可变范围 。每个函数都有其自己的工作空间来存储自己的局部变量,因此在上面的示例中实际上有3个唯一的A变量:一个在test的工作空间中,一个在test1的工作空间中,一个在test2的工作空间中。仅仅因为它们被命名相同并不意味着它们都具有相同的价值。 例如,当调用test1从test中,存储在变量中的值A在test被复制到变量A在test1 。当test1修改本地副本A ,价值A在test不变。要更新test的A值,必须将test1的返回值复制到该值。 更多&回答... |
![]() |
![]() |