用邏輯語句控制流程

雖然它看似違反直覺,但你可以使用邏輯運算子來確定是否執行語句。例如:

File.exist?(filename) or STDERR.puts "#{filename} does not exist!"

這將檢查檔案是否存在,如果不存在則僅列印錯誤訊息。or 語句是懶惰的,這意味著一旦確定它的值是真還是假,它就會停止執行。一旦發現第一項是真的,就沒有必要檢查另一項的值。但如果第一個詞是假的,它必須檢查第二個詞。

常用的是設定預設值:

glass = glass or 'full' # Optimist! 

如果 glass 尚未設定,則將其設定為 full。更簡潔地說,你可以使用 or 的符號版本:

glass ||= 'empty' # Pessimist. 

只有當第一個語句為 false 時,才可以執行第二個語句:

File.exist?(filename) and puts "#{filename} found!"

同樣,and 是懶惰的,因此只有在必要時才會執行第二個語句才能得到一個值。

or 運算子的優先順序低於 and。同樣,||的優先順序低於 &&。符號形式的優先順序高於單詞形式。這很方便你知道何時需要將此技術與賦值混合使用:

a = 1 and b = 2
#=> a==1
#=> b==2
a = 1 && b = 2; puts a, b
#=> a==2
#=> b==2

請注意,Ruby 樣式指南建議

andor 關鍵字被禁止。最小的附加可讀性不值得引入細微錯誤的高概率。對於布林表示式,請始終使用 &&||。對於流程控制,使用 ifunless; &&||也可以接受但不太清楚。