Ruby 支援一套豐富的運算符。大多數運算符實際上是方法的呼叫,運算符是所有算符的總稱,其底下又可以細分為算術運算符、比較運算符、邏輯運算符….等,文章只會紀錄幾個常用的運算符與特殊規則。
假設變數 a = 10, b = 3(前四個用法較常見,因此省略)
| 運算符 | 描述 | 舉例 |
|---|---|---|
| + | 加法 | — |
| _ | 減法 | — |
| * | 乘法 | — |
| / | 除法 | — |
| % | 餘數 | a%b 得到 1 |
| ** | 指數 | a**b 得到 1000 |
假設變數 a = 10, b = 20
| 運算符 | 描述 | 舉例 |
|---|---|---|
| == | 檢查兩數值是否相等,相等回傳 true | (a == b) 不會回傳 true |
| ! = | 檢查兩數值是否相等,不相等回傳 true | (a != b) 回傳 true. |
| > | 檢查左數值是否大於右數值,大於回傳 true | (a > b) 不會回傳 true. |
| < | 檢查左數值是否小於右數值,小於回傳 true | (a < b) 回傳 true. |
| > = | 檢查左數值是否大於等於右數值,大於回傳 true | (a >= b) 不會回傳 true. |
| < = | 檢查左數值是否小於等於右數值,小於回傳 true | (a <= b) 回傳 true. |
| < = > | 第1個操作數等於第2個運算元則傳回 0;第1個運算元大於第2個運算元則回傳 1;第1個運算元小於第2個運算元則回傳 -1 | (a <=> b) 回傳 -1. |
| === | case 語句的 when 子句內的條件相等,回傳true | (1...10) === 5 回傳 true |
| .eql? | 接收者和参数具有相同的類型和值,回傳 true | 1 == 1.0 returns true, but 1.eql?(1.0) is false. |
| equal? | 接收者和參數具有相同的物件 ID,回傳 true。 | 如果 aObj 是 bObj 的 copy,aObj == bObj 回傳 true;a.equal?bObj 回傳 false;a.equal?aObj 回傳 true |
| 運算符 | 描述 | 舉例 |
|---|---|---|
| and | 檢查兩數值是否為真,兩數值皆為真,回傳true | (a and b) 回傳 true. |
| or | 檢查兩數值任一不為真,任一數值為真,回傳 true | (a or b) 回傳 true. |
| && | 檢查兩數值是否為真,兩數值皆為真,回傳true | (a&& b) 回傳 true. |
| || | 檢查兩數值任一不為真,任一數值為真,回傳 true | (a || b) 回傳 true. |
| ! | 逆轉操作時的邏輯狀態。如果條件為真則使其為假。 | !(a && b) 回傳 false |
| not | 逆轉操作時的邏輯狀態。如果條件為真則使其為假。 | not(a && b) 回傳 false |
可以使用符號(&&, ||, !)或文字(and, or, not),但符號有較高的優先權(precedence)
當 and 遇上 =
def trip_schedule?(trip1 = nil, trip2 = nil)
@my_trip = trip1 and trip2
end
trip_schedule?('Europe', 'America' ) # => "租借女友"
@my_trip # => "Europe"
trip_schedule?('Europe') # => nil
@my_trip # => "Europe"
由於=優先權大於and,所以兩個都只會印出"Europe"
參考資料: