[問題] 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