用邏輯語句控制流程
雖然它看似違反直覺,但你可以使用邏輯運算子來確定是否執行語句。例如:
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 樣式指南建議 :
and
和or
關鍵字被禁止。最小的附加可讀性不值得引入細微錯誤的高概率。對於布林表示式,請始終使用&&
和||
。對於流程控制,使用if
和unless
;&&
和||
也可以接受但不太清楚。