许多函数和运算符都有两个或多个参数,当用不同类的对象调用这些函数时,可能会出现这种情况。因此,当有混合对象给定给函数或运算符时,有必要确定从哪个类调用哪个方法的优先级。为此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