Uri Guttman wrote:
>>>>>> "LW" == Larry Wall <la...@wall.org> writes:
> 
>   >>> infix:<cmp> does numeric comparison if both operands are numbers, and 
>   >>> string comparison otherwise.
> 
>   LW> That is a bit of an oversimplification.
> 
>   LW> Any type may define infix:<cmp> however it likes for two arguments of
>   LW> its own type.  It may also define multis with other types that define
>   LW> desirable coercions.  The infix:<cmp>:(Any,Any) routine is what would
>   LW> be providing the default string coercion, so it would succeed for
>   LW> any two different types that match Any and have string coercions.
>   LW> Outside of Any are the Object and Junction types; I suppose cmp can
>   LW> thread on junctions, but trying to sort junctions might well result
>   LW> in aberrant behavior, especially if we choose a sort algorithm that
>   LW> coredumps on circular ordering relations.  :)
> 
> this means cmp still does a string compare as long as it can coerce its
> args to strings.

... and as long as no other multis are specified.
I know at least of infix:<cmp>(Num $a, Num $b) (which does the same as
Perl 5's <=>) and infix:<cmp>(Pair $a, Pair $b) (which does $a.key cmp
$a.key || $a.value cmp $b.value), so numbers and pairs DWIM. Likewise
sorting of AoAs is specified to first sort on the first items, then on
the seconds etc.

Cheers,
Moritz

Reply via email to