use*_*601 12 perl6 truthiness raku
尽管总是可以使用mixins或方法重写来修改Bool强制,但是默认情况下哪些值被认为是真实的而哪些值被认为是虚假的?
use*_*601 12
没有真实值,因为每种类型都是通过.Bool在布尔上下文中调用的方法自行确定的。对于内置类型,调用False其.Bool方法时将返回以下内容。
0(除Rat的x/0其中x?0)Failure Promise 在保留/破坏之前。StrDistance 之前/之后的相同。Junction,如您所愿。否则,默认情况下,将True在.Bool调用其方法时返回任何定义的值。这包括Str '0',NaN,和零长度范围(0^..^0),在其他语言中可能不是truthy。
此答案仅供参考。请参阅此答案以进行更详细的讨论。
TL; DR此答案是基于相关文档的详尽概述。1个
基础案例2是True用于定义对象(一个实例),并False为未定义一个(一种类型的对象)。
数值0或0/0为False。(但是Rational具有非零分子的a ,例如1/0is True和(0/0).Num(其值为NaN)是True。)
一个空的集合(List,Hash,Set,Buf,等)是False。
一个空字符串(例如,文字"")为False。(注"0":"0.0"等等True。)
定义Failure为False。
甲定义Promise是False,直到其状态变为Kept/ Broken。
定义的StrDistance是False它表示的字符串转换是否对要转换的字符串没有影响。
定义Junction是True或False取决于结的类型及其元素的True/ False值。
1我写了第一个项目符号项目是基于知道它是真实的,因为它是P6的基础,并通过检查编译器的代码进行确认。2其他的要点总结在写这个答案的时间内容的.Bool文档页面,此时将其列出的20种。如果后一页不完整,则此答案不完整。
2通过查看Rakudo实现代码,尤其是内核的代码,可以看到基本情况Mu.pm6。有关相关代码链接,请参见我对类似SO的回答。