按枚举顺序§
有关infix cmp,请参阅主要文档 in context
multi infix:<cmp>(\a, \b --> Order)
cmp
首先会尝试将操作数作为字符串进行比较(通过强制转换为 Stringy
),如果失败,则会尝试通过 <=>
运算符或任何其他类型适当的比较运算符进行数值比较。另请参阅 cmp
运算符的文档。
按列表§
有关infix cmp,请参阅主要文档 in context
multi infix:<cmp>(List , List )
通过比较元素 @a[$i]
与 @b[$i]
(对于某些 Int $i
,从 0 开始)来计算 Lists
,并根据值是否以及如何不同返回 Order::Less
、Order::Same
或 Order::More
。如果运算计算结果为 Order::Same
,则将 @a[$i + 1]
与 @b[$i + 1]
进行比较。重复此操作,直到一个大于另一个或所有元素都用尽为止。
如果 List
的长度不同,则最多只进行 $n
次比较(其中 $n = @a.elems min @b.elems
)。如果所有这些比较计算结果都为 Order::Same
,则根据哪个 List
更长来选择最终值。
say (1, 2, 3) cmp (1, 2, 3); # OUTPUT: «Same»say (4, 5, 6) cmp (4, 5, 7); # OUTPUT: «Less»say (7, 8, 9) cmp (7, 8, 8); # OUTPUT: «More»say (1, 2) cmp (1, 2, 3); # OUTPUT: «Less»say (1, 2, 3) cmp (1, 2); # OUTPUT: «More»say (9).List cmp (^10).List; # OUTPUT: «More»
按运算符§
有关infix cmp,请参阅主要文档 in context
multi infix:<cmp>(Any, Any)multi infix:<cmp>(Real, Real)multi infix:<cmp>(Str, Str)multi infix:<cmp>(Version, Version)
使用字符串语义比较字符串,使用数字语义比较数字,Pair
对象首先按键比较,然后按值比较,依此类推。
如果 $a eqv $b
,则 $a cmp $b
始终返回 Order::Same
。
say (a => 3) cmp (a => 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 , Allomorph )
比较两个 Allomorph
对象。首先对 Numeric
值进行比较,然后对 Str
值进行比较。如果您想按不同的顺序进行比较,那么您首先需要强制转换为 Numeric
或 Str
值
my = IntStr.new(42, "smaller");my = IntStr.new(43, "larger");say cmp ; # OUTPUT: «Less»say .Str cmp .Str; # OUTPUT: «More»
按对§
有关infix cmp,请参阅主要文档 in context
multi infix:<cmp>(Pair, Pair)
与类型无关的比较器;比较两个 Pair
。首先比较它们的键部分,如果键相等,则比较值部分。
my = (Apple => 1);my = (Apple => 2);say cmp ; # OUTPUT: «Less»