按枚举顺序§

有关infix cmp,请参阅主要文档 in context

multi infix:<cmp>(\a, \b --> Order:D)

cmp 首先会尝试将操作数作为字符串进行比较(通过强制转换为 Stringy),如果失败,则会尝试通过 <=> 运算符或任何其他类型适当的比较运算符进行数值比较。另请参阅 cmp 运算符的文档

按列表§

有关infix cmp,请参阅主要文档 in context

multi infix:<cmp>(List @aList @b)

通过比较元素 @a[$i]@b[$i](对于某些 Int $i,从 0 开始)来计算 Lists,并根据值是否以及如何不同返回 Order::LessOrder::SameOrder::More。如果运算计算结果为 Order::Same,则将 @a[$i + 1]@b[$i + 1] 进行比较。重复此操作,直到一个大于另一个或所有元素都用尽为止。

如果 List 的长度不同,则最多只进行 $n 次比较(其中 $n = @a.elems min @b.elems)。如果所有这些比较计算结果都为 Order::Same,则根据哪个 List 更长来选择最终值。

say (123cmp (123);   # OUTPUT: «Same␤» 
say (456cmp (457);   # OUTPUT: «Less␤» 
say (789cmp (788);   # OUTPUT: «More␤» 
 
say (12)    cmp (123);   # OUTPUT: «Less␤» 
say (123cmp (12);      # OUTPUT: «More␤» 
say (9).List  cmp (^10).List;  # OUTPUT: «More␤»

按运算符§

有关infix cmp,请参阅主要文档 in context

multi infix:<cmp>(Any,       Any)
multi infix:<cmp>(Real:D,    Real:D)
multi infix:<cmp>(Str:D,     Str:D)
multi infix:<cmp>(Version:DVersion:D)

通用“智能”三路比较器.

使用字符串语义比较字符串,使用数字语义比较数字,Pair 对象首先按键比较,然后按值比较,依此类推。

如果 $a eqv $b,则 $a cmp $b 始终返回 Order::Same

say (=> 3cmp (=> 4);   # OUTPUT: «Less␤» 
say 4        cmp 4.0;        # OUTPUT: «Same␤» 
say 'b'      cmp 'a';        # OUTPUT: «More␤»

逐个代码点比较字符串;如果前导代码点相同,则返回比较第一个不同代码点的结果,或者如果它们的长度不同,则返回较长的字符串。

"abcd" cmp "abcde";    # OUTPUT: «Less␤» 
"abcd " cmp "abcde";   # OUTPUT: «Less␤» 
'A' cmp '';           # OUTPUT: «Less␤»

按同形异义词§

有关infix cmp,请参阅主要文档 in context

multi infix:<cmp>(Allomorph:D $aAllomorph:D $b)

比较两个 Allomorph 对象。首先对 Numeric 值进行比较,然后对 Str 值进行比较。如果您想按不同的顺序进行比较,那么您首先需要强制转换为 NumericStr

my $f = IntStr.new(42"smaller");
my $g = IntStr.new(43"larger");
say $f cmp $g;          # OUTPUT: «Less␤» 
say $f.Str cmp $g.Str;  # OUTPUT: «More␤»

按对§

有关infix cmp,请参阅主要文档 in context

multi infix:<cmp>(Pair:DPair:D)

与类型无关的比较器;比较两个 Pair。首先比较它们的部分,如果键相等,则比较部分。

my $a = (Apple => 1);
my $b = (Apple => 2);
say $a cmp $b# OUTPUT: «Less␤»