ral*_*ldi 26 perl6 truthiness raku
在阅读有关Perl 6的内容时,我看到一个被大肆宣扬的功能,您不再需要这样做:
return "0 but true";
Run Code Online (Sandbox Code Playgroud)
...但可以改为:
return 0 but True;
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,Perl 6中的真相如何运作?在Perl 5中,它很简单:0,""和undef都是假的,其他一切都是真的.
在布尔上下文中,Perl 6中有哪些规则?
bri*_*foy 17
Perl 6现在通过向对象询问问题而不是查看其值来评估真相.该值不是对象.这是我喜欢的其他对象语言,并且很乐意在Perl中使用:我可以决定对象如何响应并且可以改变它.正如ysth所说,你可以在Perl 5中做到超载,但我总是觉得我这样做后必须洗手.:)
如果你没有做任何改变,Perl 6的行为与Perl 5相同,所以你得到的惊喜最少.
根据O'Reilly的Perl 6和Parrot Essentials,false是0,undef,空字符串,值标记为false.其他一切都是真的.
此外,Perl 6既有一个原始的布尔类型,也有任何值可以混合的True和False 角色(例如,你可以有一个"0但是真"值或者一个"1但是假",或者一个错误的列表包含元素,或者是空的真实列表.
请访问http://www.mail-archive.com/macosx@perl.org/msg09930.html
因此,结合我认为每个人的最佳答案:
当您在布尔上下文中评估变量时,会调用其 .true() 方法。对象使用的默认 .true() 方法会对对象的值执行 Perl 5 风格的 <0, "", undef> 检查,但是当您说“but True”或“but False”时,此方法将被覆盖不查看值的只是返回一个常量。
人们可以想象编写一个 true() 方法,例如,当值为偶数时返回 true,当值为奇数时返回 false。