回答
很多編程需要理解布爾邏輯,基本上如何確定真值和假值,這是觸發條件邏輯的原因分支,循環等
考慮一下:
Ruby中有真假值,其中有true
和false
相當於保留字(實際上遠不止這一點,但認爲更深層次的是對不同的時間。 ):
true # => true
false # => false
只有nil
和false
是Ruby的假值,其他一切都是true
。這不同於其他一些語言,如Perl,它認爲0
和''
(空字符串)也是錯誤的。請記住,Ruby中只有nil
和false
是錯誤的。
的 「非」 值的true
和false
(AKA,對立)分別false
和true
。該!
(布爾「NOT」)運算符用於此:
!true # => false
!false # => true
現在,這是一招,你會看到高級程序員使用:NOT-ING他們兩次返回其原始值的布爾版本:
!!true # => true
!!false # => false
這是一個重要的事情要了解。我們可以用值!!
除了true
/false
並確定它們是否是真的還是假的值:
!!'' # => true # !> string literal in condition
!!0 # => true # !> literal in condition
!!'foo' # => true # !> string literal in condition
!!1 # => true # !> literal in condition
Ruby是不是太高興,我使用一個字面的測試,但你可以看到,上文全部爲真,這些都是假的:
!!false # => false
!!nil # => false
希望你看到我們如何看待值的語言兩種方式,無論他們是真/假和其實際價值是什麼。
繼續前進:
的||
(布爾 「OR」)着眼於左側的價值第一。如果它是真的,它會返回該值。如果是假的,它看起來在右側,並返回:
true || false # => true
false || true # => true
nil || 'foo' # => "foo"
false || 2 # => 2
的||=
運營商的行爲類似,只有比較之後,它分配到左邊的變量,如果它是一個假的類型值:
a = false
a ||= true
a # => true
a = true
a ||= false
a # => true
分配給變量,而不是直接對文字測試,結果類似的結果:
a = nil # => nil
!a # => true
!!a # => false
b = 2 # => 2
!b # => false
!!b # => true
多一點:
||=
用作速記取代的一點點if
/then
代碼:
a = nil # => nil
b = 2 # => 2
if !a
a = b
end
a # => 2
a = 1 # => 1
b = 2 # => 2
if !a
a = b
end
a # => 1
而且所有通向該代碼你想明白:
a = nil # => nil
b = 2 # => 2
a ||= b # => 2
哇,很好的回答! – Mischa 2014-08-31 15:57:04
2
被打印出來,因爲||=
在左側變量爲nil
或false
時將右側值賦給左側變量。 a
是nil
,所以2
將被分配到a
。因此打印2
。
我相信||=
是說的簡寫方式, 「如果a
是假的把它分配給......」 在這種情況下b
所以
a = nil
b = 2
a ||= b
puts a
> 2
和
a = 4
b = 2
a ||= b
puts a
> 4
這並不是說「如果a是零」,它是說「如果a是假的」。在Ruby中,零和「假」是錯誤的值,其他的都是「真」。 – 2014-08-29 15:36:05
@TheTinMan:感謝您的更正!完全正確。我已經更新了我的回答 – 2014-09-01 09:45:19
- 1. 解釋紅寶石代碼片段
- 2. 簡單解析紅寶石
- 3. 解析紅寶石代碼
- 4. 紅寶石陣列片,不能理解這個簡單的代碼片段
- 5. 紅寶石form_for的解釋?
- 6. 優化這個紅寶石代碼
- 7. 如何幹這個紅寶石代碼
- 8. 有人可以向我解釋這一點的代碼(簡單)
- 9. 紅寶石簡單替換
- 10. 無法理解紅寶石代碼
- 11. 瞭解紅寶石代碼行
- 12. 任何人都可以解釋在這段紅寶石代碼中使用'&'嗎?
- 13. 爲什麼紅寶石解釋++的+ @
- 14. 逃逸紅寶石代碼
- 15. 紅寶石錯誤代碼
- 16. 重構我的紅寶石嘰嘰喳喳寶石代碼
- 17. 紅寶石 - 如何運行Windows cmd上的紅寶石代碼
- 18. 我dont't瞭解紅寶石
- 19. 尋找一個簡單的紅寶石模板解決方案
- 20. 紅寶石:從這個類
- 21. 請解釋紅寶石ARGF行爲
- 22. 簡單的紅寶石對象順序
- 23. 簡單的紅寶石程序
- 24. 非常簡單的DSL在紅寶石
- 25. 簡單的紅寶石平均程序
- 26. 紅寶石簡單的類問題
- 27. 紅寶石NATS簡單的發佈
- 28. 如何解釋這個簡單的C代碼的輸出?
- 29. 簡單的拼寫檢查方法/寶石紅寶石?
- 30. 基本紅寶石 - 需要對if/else語句做什麼的簡單解釋
a || = b是a = a ||的簡短手段b因爲a是零(和falsy)b會打印出來2,只需打開irb並自己嘗試。 – Doon 2014-08-29 12:40:58
這不是一個真正的Ruby問題,它是適用於所有語言的基本編程邏輯。一本好的編程教科書將會覆蓋它。 – 2014-08-29 16:12:32