Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 重载的horzcat()是如何工作的?_Oop_Matlab_Overloading - Fatal编程技术网

Oop 重载的horzcat()是如何工作的?

Oop 重载的horzcat()是如何工作的?,oop,matlab,overloading,Oop,Matlab,Overloading,我正在编写一个Matlab类,该类实现了自定义连接,以便向用户提供一个干净、富有表现力的界面。与内置的不同,重载的horzcat()——例如——的结果应该是根据类的语义设置的标量对象。但是,我不确定哪些规则适用于重载函数 说明该问题的一个类是: classdef A < handle properties k; end; methods function obj = A(var

我正在编写一个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
输出为:

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.