我可以通过引用将变量传递给Matlab中的函数吗?
我想做一些像这样的事情:
function change(x)
x=x+1;
end
并将其称为:
x=1;
change(x)
% x should be 2 now.
答案 0 :(得分:3)
执行此操作的通常方式是在输入和输出参数列表中显示相同的名称:
function [x] = change(x)
x=x+1;
end
x = 1;
x = change(x);
% now 2
例如,标准函数setfield
以这种方式工作。
此外,句柄对象(例如图形句柄)通过引用有效传递 - 句柄数值通过值传递,因此您不能替换其他对象,而是对函数中的句柄对象所做的任何更改将对来电者可见。
答案 1 :(得分:1)
由于您没有描述您的用例,我无法估计是否值得定义您自己的句柄类,但有些情况下您可能会从面向对象的方式中受益。
您的基本示例如下所示:
在名为cnt.m
的单独文件中定义句柄类(确保从handle
类继承):
classdef cnt < handle
properties (SetAccess = private)
% a private member variable.
c = 0;
end
methods
function h = cnt(c_init)
% CNT constructs a cnt handle
% CNT()
% CNT(INIT)
if nargin > 0
h.c = c_init;
end
end
function change(h)
% CHANGE increment by one
h.c = h.c+1
end
end
end
然后你可以这样做:
x = cnt();
x.change();
你也可以这样做:
function change2(cnt_obj)
cnt_obj.change()
然后调用此函数,如下所示:
change2(x)
然后会按照你要求的那样做。
后者是你应该继承handle
的原因。如果您创建普通value class
,则对change2
的调用将创建实际输入对象的副本。
请注意对于您所描述的简单用例, STUPID OVERHEAD 。仅在您有充分理由的情况下使用此选项。