虽然总是可以使用 mixins 或方法覆盖来修改 Bool 强制,但默认情况下哪些值被认为是真实的,哪些值被认为是虚假的?
注意:这个问题以前被问过,但不幸的是它太老了,它的内容已经完全过时了,现代的 Raku 毫无用处。
虽然总是可以使用 mixins 或方法覆盖来修改 Bool 强制,但默认情况下哪些值被认为是真实的,哪些值被认为是虚假的?
注意:这个问题以前被问过,但不幸的是它太老了,它的内容已经完全过时了,现代的 Raku 毫无用处。
没有真实值,因为每种类型都通过.Bool
在布尔上下文中调用的方法自行决定。对于内置类型,调用False
它们的.Bool
方法时会返回以下内容。
0
Rat
(除了x/0
where x≠0
)Failure
Promise
在被保存/损坏之前。StrDistance
其之前/之后是相同的。Junction
,当你期望的时候。否则,默认情况下,任何定义的值都会在调用True
其.Bool
方法时返回。这包括在其他语言中可能不真实的Str
'0'
、NaN
和零长度范围 ( )。0^..^0
此答案旨在作为快速参考。有关更详细的讨论,请参阅此答案。
TL;DR这个答案是基于相关文档的详尽总结。1
基本情况2用于True
已定义对象(实例)和False
未定义对象(类型对象)。
数值0
或0/0
是False
。(但是Rational
具有非零分子的 a 例如1/0
isTrue
并且(0/0).Num
(计算结果为NaN
)是True
。)
一个空集合(List
, Hash
, Set
,Buf
等)是False
.
一个空字符串(例如文字""
)是False
. (注"0"
,"0.0"
等是True
。)
A 定义Failure
为False
。
一个定义Promise
的False
直到它的状态变成Kept
/ Broken
。
一个定义StrDistance
是False
如果它所代表的字符串转换对正在转换的字符串没有影响。
定义Junction
是True
或False
取决于联结的类型及其元素的True
/False
值。
1我写了第一个项目符号项是基于知道它是真的,因为它是 P6 的基础,并且还通过检查编译器的代码来确认它。2其他要点总结了在撰写文档页面的此答案时的.Bool
内容,其中列出了 20 种类型。如果后一页不完整,则此答案不完整。
2通过查看 Rakudo 实现代码,尤其是核心的Mu.pm6
. 有关相关代码链接,请参阅我对类似 SO 的回答。