许多函数和运算符都有两个或多个参数,当用不同类的对象调用这些函数时,可能会出现这种情况。因此,当有混合对象给定给函数或运算符时,有必要确定从哪个类调用哪个方法的优先级。为此superiorto和inferiorto可以使用的函数
(class_name, …) ¶从类构造函数调用时,将当前构造的对象符号为优先级高于class_name.
在一个调用中可以指定多个这样的类。此函数可能只有从类构造函数调用。
详见: inferiorto.
(class_name, …) ¶从类构造函数调用时,将当前构造的对象符号为优先级低于class_name.
在一个调用中可以指定多个这样的类。此函数可能只有从类构造函数调用。
详见: superiorto.
对于多项式类,考虑以下情况
2 * polynomial ([1, 0, 1]);
混合了类的对象"double"具有类的对象"polynomial"。在这种情况下,返回类型应为"polynomial"所以superiorto函数用于类构造函数中。特别是多项式类构造函数将被修改为
## -*- texinfo -*-
## @deftypefn {} {} polynomial ()
## @deftypefnx {} {} polynomial (@var{a})
## Create a polynomial object representing the polynomial
##
## @example
## a0 + a1 * x + a2 * x^2 + @dots{} + an * x^n
## @end example
##
## @noindent
## from a vector of coefficients [a0 a1 a2 @dots{} an].
## @end deftypefn
function p = polynomial (a)
if (nargin == 0)
p.poly = [0];
p = class (p, "polynomial");
else
if (strcmp (class (a), "polynomial"))
p = a;
elseif (isreal (a) && isvector (a))
p.poly = a(:).'; # force row vector
p = class (p, "polynomial");
else
error ("@polynomial: A must be a real vector");
endif
endif
superiorto ("double");
endfunction
请注意,用户类总是具有比内置Octave类型更高的优先级。因此,将多项式类符号为高于"double"类实际上并不是必需的。
当遇到两个优先级相等的对象时,Octave将使用参数列表中第一个出现的对象的方法。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2