我正在编写一个实现自定义连接的Matlab类,以便为用户提供干净,富有表现力的界面。与内置函数不同,重载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
现在,在使用小脚本测试此类时:
% Please don't run this is you have valuable
% data in your base workspace.
clear classes;
clc;
a = A('dummy');
b = [-1, a]; % Should fail
输出是:
1st arg is double.
2nd arg is A.
这是令人惊讶的,因为第一个参数是双精度的,即应该调用内置的horzcat()
,随后抛出关于类型不匹配的异常。据我所知,第一个参数的类型决定了哪些重载函数将被调用(好的,我们将自己局限于非静态方法)。代码在R2011b / Linux和R2012a / Windows上进行了测试,结果相同。
所以,这是我的问题:调用重载方法的实际规则是什么? Matlab文档没有解释上面的结果,我想避免根据我对该语言如何工作的幻想来开发代码。
提前感谢您的意见。