s-6ren">
gpt4 book ai didi

max - perl6 混合 Str 和 Int 参数的最小值和最大值

转载 作者:行者123 更新时间:2023-12-04 05:28:27 24 4
gpt4 key购买 nike

当参数包含 Str 和 Int 的混合时,首先为 min 和 max 例程转换什么类型?

To exit type 'exit' or '^D'
> say ("9", "10").max
9
> say ("9", "10").max.WHAT
(Str)
> say (9, "10").max
9
> say (9, "10").max.WHAT
(Int) # if convert to Int first, result should be 10
> say ("9", 10).max
9
> say ("9", 10).max.WHAT
(Str) # if convert to Str first, result should be 9
> say (9, "10").min
10
> say (9, "10").min.WHAT
(Str) # does min and max convert Str or Int differently?

如果 min 或 max 将参数转换为第一个参数的类型,这里的结果仍然不一致。

谢谢你的开导!!!

最佳答案

两个minmax使用 cmp中缀运算符进行比较。如果类型不同,则使用此逻辑(稍微重写为纯 Perl 6,而真正的使用内部快捷方式):

multi sub infix:<cmp>($a, $b) {
$a<> =:= $b<>
?? Same
!! a.Stringy cmp b.Stringy
}

实际上,如果这两个东西指向完全相同的对象,那么它们就是 Same。 ,否则将两者都字符串化,然后进行比较。因此:
say 9 cmp 10;      # uses the (Int, Int) candidate, giving Less
say "9" cmp "10"; # uses the (Str, Str) candidate, giving More
say 9 cmp "10"; # delegates to "9" cmp "10", giving More
say "9" cmp 10; # delegates to "9" cmp "10", giving More

转换为字符串是为了比较(作为 cmp 的实现细节),因此对 min 返回的值没有影响或 max ,这将是在输入列表中找到的。

关于max - perl6 混合 Str 和 Int 参数的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com