我可以通过ref传递一个变量给Matlab中的函数吗?在matlab中通过ref传递一个变量
我想要做的事,如这样的:
function change(x)
x=x+1;
end
,并调用它像这样:
x=1;
change(x)
% x should be 2 now.
我可以通过ref传递一个变量给Matlab中的函数吗?在matlab中通过ref传递一个变量
我想要做的事,如这样的:
function change(x)
x=x+1;
end
,并调用它像这样:
x=1;
change(x)
% x should be 2 now.
一贯的风格这样做是有相同的名字同时出现在输入和输出参数列表:
function [x] = change(x)
x=x+1;
end
x = 1;
x = change(x);
% now 2
例如,标准功能setfield
以这种方式工作。
此外,处理对象(例如图形句柄)通过引用传递有效 - 手柄数值是按值传递的,所以你不能代替不同的对象,但任何改变处理对象的取得函数将对调用者可见。
既然你没有说明你的用例,我无法估计是否值得来定义自己的句柄类,但也有在那里你可以从面向对象的方式中获益的情况。
你的基本的例子会是这个样子:
定义你的手柄类称为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
将创建实际输入对象的副本。
请注意,对于你描述做这样的事情简单的用例是愚蠢的开销。只有在您有充分理由的情况下才使用此功能。
当然,你可以做到这一点。你试过了吗? – 2014-10-05 18:31:29
@Saturisk:不,你不能。有*你*尝试过吗? ;) – 2014-10-05 18:32:51
是的,我试过了,它不工作! – mans 2014-10-05 18:32:53