在阅读有关Perl 6的内容时,我看到一个被宣传的功能,您不再需要这样做:
return "0 but true";
...但可以改为:
return 0 but True;
如果是这样的话,Perl 6中的真相如何运作?在Perl 5中,它非常简单:0,“”和undef都是假的,其他一切都是真的。
在布尔上下文中,Perl 6中有哪些规则?
答案 0 :(得分:16)
Perl 6现在通过向对象询问问题而不是查看其值来评估真相。该值不是对象。这是我喜欢的其他对象语言,并且很乐意在Perl中使用:我可以决定对象如何响应并且可以改变它。正如ysth所说,你可以在Perl 5中做到超载,但我总是觉得我这样做后必须洗手。 :)
如果您不做任何改变,Perl 6的行为方式与Perl 5相同,因此您获得的惊喜最少。
答案 1 :(得分:11)
答案 2 :(得分:11)
答案 3 :(得分:6)
根据O'Reilly的 Perl 6 and Parrot Essentials , false 是0,undef,空字符串,标记为 false 的值。 true 就是其他一切。
此外,Perl 6既有一个原始的布尔类型,又有一个True和False 角色,任何值都可以混合(所以你可以有一个“0但是真”值或“1但是假“例如一个,或包含元素的错误列表,或者是空的真实列表”。
请参阅http://www.mail-archive.com/macosx@perl.org/msg09930.html
答案 4 :(得分:3)
所以要结合我认为最好的每个人的答案:
在布尔上下文中计算变量时,会调用其.true()方法。对象使用的默认.true()方法执行Perl 5样式< 0,“”,undef>检查对象的值,但是当你说“但是为真”或“但是为假”时,这个方法会被一个不查看该值的方法所覆盖,只返回一个常量。
可以想象写一个true()方法,比如说,当值是偶数时返回true,当它是奇数时返回false。
答案 5 :(得分:1)
几乎无处不在的一个错误值是" 0"。我最近做了这个痛苦的发现," 0"在PERL 5中 false 。哎。非空字符串,它是错误的。我真的希望PERL6会改变,但我猜不会。
> if ( "0" ) { say "True" } else { say "False" }
False
|| =成语破坏了我真正期待的一些字符串:
$ perl -e '$x = "0"; $x ||= ""; print ">>$x<<\n";'
>><<