[问题] AND operator

楼主: nohaha (不是开玩笑的)   2014-05-02 11:50:37
小弟是新手,目前读learn ruby the hard way到ch37
在查询and operator用法时出现一些困惑,想请各位帮忙释疑
在the ruby programming language中读到
1.
ruby中,只有true/false为内建的boolean type变量
在ruby中,除了false、nil在作判断时,会被视为false
其余皆为true (包含 true/ 任何的fixnum / 0 / Nan / [] / {} )
2.
ruby有short-cicuiting的特性
当and前的值,为false,则无视and后的值为何,此式为false
(e.g. if false and true => 结果为false)
当or前的值为true,则无视and后的值为何,此式为true
(e.g. if true or false =>结果为true)
这部分我懂,但当拿fixnum来作运算时,我就不能理解结果了
0 and 0 #=> 0
0 and 1 #=> 1
1 and 0 #=> 0
1 and 1 #=> 1
试着换成更大的值
0 and 0 #=> 0
0 and 4 #=> 4
4 and 0 #=> 0
4 and 4 #=> 4
看结果的话,and的结果,似乎跟and后者相同
可以请教一下原因吗? 感谢
作者: mars90226 (火星人)   2014-05-02 13:00:00
and前面是false的话,就是false,不是的话,就是后面那个,所以0 and 1就是1应该说,and不会回传true或false,而是回传值所以0 and 1不是回传true,而是1,不过1也是"truthy"
楼主: nohaha (不是开玩笑的)   2014-05-02 13:18:00
!!!整个通了,我懂了,谢谢楼上
作者: AIGecko (师大猫耳控)   2014-05-02 14:38:00
上面那些其实就是 true and 1 这种感觉吧
楼主: nohaha (不是开玩笑的)   2014-05-02 15:24:00
了解了,因为之前不知道and回传的到底是什么属性
作者: uranusjr (←這人是超級笨蛋)   2014-05-02 21:51:00
顺带一提 or 也有类似效果
楼主: nohaha (不是开玩笑的)   2014-05-02 23:38:00
而且我发现,用puts 0 and 1时,会因为优先权影响结果再加上or一起看,整个会变的很困惑
作者: danny8376 (钓到一只猴子@_@)   2014-05-03 02:00:00
其实不少高阶语言都有这特性这类逻辑运算结果不会是T/F 而是把最后的值吐出来

Links booklink

Contact Us: admin [ a t ] ucptt.com