Oop 重载的horzcat()是如何工作的?
我正在编写一个Matlab类,该类实现了自定义连接,以便向用户提供一个干净、富有表现力的界面。与内置的不同,重载的Oop 重载的horzcat()是如何工作的?,oop,matlab,overloading,Oop,Matlab,Overloading,我正在编写一个Matlab类,该类实现了自定义连接,以便向用户提供一个干净、富有表现力的界面。与内置的不同,重载的horzcat()——例如——的结果应该是根据类的语义设置的标量对象。但是,我不确定哪些规则适用于重载函数 说明该问题的一个类是: classdef A < handle properties k; end; methods function obj = A(var
horzcat()
——例如——的结果应该是根据类的语义设置的标量对象。但是,我不确定哪些规则适用于重载函数
说明该问题的一个类是:
classdef A < handle
properties
k;
end;
methods
function obj = A(varargin)
if nargin == 0
obj.k = 0;
else
obj.k = varargin{1};
end;
end;
function obj = horzcat(obj1, varargin)
fprintf('1st arg is %s.\n', class(obj1));
if nargin > 1
fprintf('2nd arg is %s.\n', class(varargin{1}));
end;
obj = obj1; % Not important
end;
end;
end
输出为:
1st arg is double.
2nd arg is A.
这是令人惊讶的,因为第一个参数是double,即应该调用内置的horzcat()
,然后抛出一个关于类型不匹配之类的异常。据我所知,第一个参数的类型决定了将调用哪个重载函数(好的,我们将自己限制为非静态方法)。代码在R2011b/Linux和R2012a/Windows上进行了测试,结果相同
所以,这是我的问题:调用重载方法的实际规则是什么?Matlab文档没有解释上述结果,我希望避免基于我对语言工作原理的幻想开发代码
提前感谢您的输入。我认为MATLAB的文档对此非常清楚: 发件人: MATLAB使用主导参数来确定 要调用的函数。如果主导参数是一个对象,那么MATLAB 调用由对象的类定义的方法(如果有) 关于支配论点的更多信息: 方法参数列表中的主要参数决定了 MATLAB运行时调用的方法或函数的版本。 支配地位是由各阶级的相对先例决定的 争论。通常,用户定义的类优先于 内置的MATLAB类。因此,最左边的参数决定 调用哪个方法。但是,用户定义的类可以指定 特定阶级的相对优势
好吧,这就解释得很清楚了。谢谢你花时间回答我。(我自己注意:下次仔细阅读文档…)
1st arg is double.
2nd arg is A.