为何0有时属于Numeric类型有时却不属于?
问题原因解析
这两种写法本质上是完全不同的操作逻辑,导致了结果差异:
1. grep(Numeric)的逻辑
grep接收类型作为参数时,是检查元素本身的类型是否属于Numeric(或其子类)。
- 数组中的
-1、0、1都是Int类型(Int是Numeric的子类),所以会被保留; 'hello'是Str类型,不属于Numeric体系,因此被过滤。
2. $n.Numeric的逻辑
调用.Numeric方法是尝试将对象转换为数值类型,然后在if条件判断中,Raku会把转换后的数值自动转为布尔值:
- Raku的布尔规则里,
0会被判定为False,非0数值则为True; - 所以
0.Numeric返回0,在if条件里不成立,不会被输出; - 而
-1和1的.Numeric返回自身(非0),条件成立,被输出; - 补充:
'hello'.Numeric会返回0,同样不会触发if分支。
简单总结:前者是类型归属检查,后者是数值转换后的布尔值判断,这就是0在两种场景下表现不同的核心原因。
内容的提问来源于stack exchange,提问作者sid_com
相关产品推荐
相关产品推荐

