[問題] AND operator

看板Ruby作者 (不是開玩笑的)時間10年前 (2014/05/02 11:50), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/2 (看更多)
小弟是新手,目前讀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後者相同 可以請教一下原因嗎? 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.159.64.175 ※ 文章網址: http://www.ptt.cc/bbs/Ruby/M.1399002639.A.4F3.html

05/02 13:00, , 1F
and前面是false的話,就是false,不是的話,就是後面那
05/02 13:00, 1F

05/02 13:00, , 2F
個,所以0 and 1就是1
05/02 13:00, 2F

05/02 13:01, , 3F
應該說,and不會回傳true或false,而是回傳值
05/02 13:01, 3F

05/02 13:02, , 4F
所以0 and 1不是回傳true,而是1,不過1也是"truthy"
05/02 13:02, 4F

05/02 13:18, , 5F
!!!整個通了,我懂了,謝謝樓上
05/02 13:18, 5F

05/02 14:38, , 6F
上面那些其實就是 true and 1 這種感覺吧
05/02 14:38, 6F

05/02 15:24, , 7F
瞭解了,因為之前不知道and回傳的到底是什麼屬性
05/02 15:24, 7F

05/02 21:51, , 8F
順帶一提 or 也有類似效果
05/02 21:51, 8F

05/02 23:38, , 9F
而且我發現,用puts 0 and 1時,會因為優先權影響結果
05/02 23:38, 9F

05/02 23:38, , 10F
再加上or一起看,整個會變的很困惑
05/02 23:38, 10F

05/03 02:00, , 11F
其實不少高階語言都有這特性
05/03 02:00, 11F

05/03 02:01, , 12F
這類邏輯運算結果不會是T/F 而是把最後的值吐出來
05/03 02:01, 12F
文章代碼(AID): #1JOnOFJp (Ruby)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
2
12
文章代碼(AID): #1JOnOFJp (Ruby)