Matlab中

时间:2018-01-10 17:44:26

标签: matlab

我今天有一个疑问:)。 对于

A=1;

是否有任何函数f执行相同的操作?喜欢以下

f(A,1);

在某些情况下,例如在cellfun或类似的情况下,它可以帮助我。

2 个答案:

答案 0 :(得分:4)

一般情况下,MATLAB函数不能改变它们的输入。

但是,如果你很勇敢,你可以create a MEX-file that breaks that promise and does change the input。在MEX文件中,您可以写入输入数组,但不小心这样做会导致严重破坏。例如,

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ctawrapper" class="clearfix ctaFloat">
  <h4>sponsored topics</h4>
</div>

会导致B也被修改,因为当你执行B = A; f(A,1); % <- modifies A 时,MATLAB会延迟复制数据。也就是说,在您修改一个数据之前,这两个变量指向相同的数据,此时数据将被复制。但是在MEX文件中,您可以在不进行此检查的情况下写入矩阵,从而也可以修改B = A。我提供的链接显示了如何仔细修改B

答案 1 :(得分:3)

如果您的变量Ahandle class object,则可以轻松完成此操作,从而为其提供参考行为。然后,您可以为接受类对象f的类创建方法A,并为其存储新值。有关详细信息,请参阅Object-Oriented Programming

对于doublecell等数据类型,没有以这种方式工作的内置函数。您可以使用assignininputname制作自己的功能,如下所示:

function f(var, value)
  assignin('caller', inputname(1), value);
end

并按照以下方式调用它,A已定义:

A = 0;
f(A, 1);  % Changes the value of A to 1

然而,这通常被认为是不好的做法,因为它使代码更难以遵循,因为按值调用行为是预期的规范。