Ruby 支持一套豐富的運算符。大多數運算符實際上是方法調用。例如,a + b 被解釋爲 a.+(b),其中指向變量 a 的 + 方法被調用,b 作爲方法調用的參數。
對於每個運算符(+ - * / % ** & | ^ << >> && ||),都有一個相對應的縮寫賦值運算符(+= -= 等等)。
Ruby 算術運算符
假設變量 a 的值爲 10,變量 b 的值爲 20,那麼:
運算符 | 描述 | 實例 |
---|---|---|
+ | 加法 - 把運算符兩邊的操作數相加 | a + b 將得到 30 |
- | 減法 - 把左操作數減去右操作數 | a - b 將得到 -10 |
* | 乘法 - 把運算符兩邊的操作數相乘 | a * b 將得到 200 |
/ | 除法 - 把左操作數除以右操作數 | b / a 將得到 2 |
% | 求模 - 把左操作數除以右操作數,返回餘數 | b % a 將得到 0 |
** | 指數 - 執行指數計算 | a**b 將得到 10 的 20 次方 |
Ruby 比較運算符
假設變量 a 的值爲 10,變量 b 的值爲 20,那麼:
運算符 | 描述 | 實例 |
---|---|---|
== | 檢查兩個操作數的值是否相等,如果相等則條件爲真。 | (a == b) 不爲真。 |
!= | 檢查兩個操作數的值是否相等,如果不相等則條件爲真。 | (a != b) 爲真。 |
> | 檢查左操作數的值是否大於右操作數的值,如果是則條件爲真。 | (a > b) 不爲真。 |
< | 檢查左操作數的值是否小於右操作數的值,如果是則條件爲真。 | (a < b) 爲真。 |
>= | 檢查左操作數的值是否大於或等於右操作數的值,如果是則條件爲真。 | (a >= b) 不爲真。 |
<= | 檢查左操作數的值是否小於或等於右操作數的值,如果是則條件爲真。 | (a <= b) 爲真。 |
<=> | 聯合比較運算符。如果第一個操作數等於第二個操作數則返回 0,如果第一個操作數大於第二個操作數則返回 1,如果第一個操作數小於第二個操作數則返回 -1。 | (a <=> b) 返回 -1。 |
=== | 用於測試 case 語句的 when 子句內的相等。 | (1...10) === 5 返回 true。 |
.eql? | 如果接收器和參數具有相同的類型和相等的值,則返回 true。 | 1 == 1.0 返回 true,但是 1.eql?(1.0) 返回 false。 |
equal? | 如果接收器和參數具有相同的對象 id,則返回 true。 | 如果 aObj 是 bObj 的副本,那麼 aObj == bObj 返回 true,a.equal?bObj 返回 false,但是 a.equal?aObj 返回 true。 |
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
class Example
def if_true(num1,num2)
#“==”檢查兩個操作數的值是否相等,如果相等則條件爲真。
#puts (num1==num2)
#“!=”檢查兩個操作數的值是否相等,如果不相等則條件爲真。
#puts (num1!=num2)
#“>”檢查左操作數的值是否大於右操作數的值,如果是則條件爲真。
#puts (num1>num2)
#“<”檢查左操作數的值是否小於右操作數的值,如果是則條件爲真。
#puts (num1<num2)
#“>=”檢查左操作數的值是否大於或等於右操作數的值,如果是則條件爲真。
#puts (num1>=num2)
#"<="檢查左操作數的值是否小於或等於右操作數的值,如果是則條件爲真。
#puts (num1<=num2)
#"<=>" 聯合比較運算符,
# eg: 10 <=> 20 : -1 如果第一個操作數小於第二個操作數則返回 -1
# eg: 20 <=> 20 : 0 如果第一個操作數等於第二個操作數則返回 0
# eg: 20 <=> 10 : 1 如果第一個操作數大於第二個操作數則返回 1
#puts (num1<=>num2)
#"===" 用於測試 case 語句的 when 子句內的相等。
#puts (1...10) === 11
#".eql?"如果接收器和參數具有相同的類型和相等的值,則返回 true
#puts "njh".eql?"njh"
#equal?如果接收器和參數具有相同的對象 id,則返回 true。
end
end
# 創建對象
object=Example.new()
object.if_true(10,20)
object1=object
object1.if_true(10,20)
puts object1.equal?object
Ruby 賦值運算符
假設變量 a 的值爲 10,變量 b 的值爲 20,那麼:
運算符 | 描述 | 實例 |
---|---|---|
= | 簡單的賦值運算符,把右操作數的值賦給左操作數 | c = a + b 將把 a + b 的值賦給 c |
+= | 加且賦值運算符,把右操作數加上左操作數的結果賦值給左操作數 | c += a 相當於 c = c + a |
-= | 減且賦值運算符,把左操作數減去右操作數的結果賦值給左操作數 | c -= a 相當於 c = c - a |
*= | 乘且賦值運算符,把右操作數乘以左操作數的結果賦值給左操作數 | c *= a 相當於 c = c * a |
/= | 除且賦值運算符,把左操作數除以右操作數的結果賦值給左操作數 | c /= a 相當於 c = c / a |
%= | 求模且賦值運算符,求兩個操作數的模賦值給左操作數 | c %= a 相當於 c = c % a |
**= | 指數且賦值運算符,執行指數計算,並賦值給左操作數 | c **= a 相當於 c = c ** a |
Ruby 並行賦值
Ruby 也支持變量的並行賦值。這使得多個變量可以通過一行的 Ruby 代碼進行初始化。例如:
a = 10
b = 20
c = 30
使用並行賦值可以更快地聲明:
a, b, c = 10, 20, 30
並行賦值在交換兩個變量的值時也很有用:
a, b = b, c
Ruby 邏輯運算符
下表列出了 Ruby 支持的邏輯運算符。
假設變量 a 的值爲 10,變量 b 的值爲 20,那麼:
運算符 | 描述 |
---|---|
and | 稱爲邏輯與運算符。如果兩個操作數都爲真,則條件爲真。 |
or | 稱爲邏輯或運算符。如果兩個操作數中有任意一個非零,則條件爲真。 |
&& | 稱爲邏輯與運算符。如果兩個操作數都非零,則條件爲真。 |
|| | 稱爲邏輯或運算符。如果兩個操作數中有任意一個非零,則條件爲真。 |
! | 稱爲邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件爲真則邏輯非運算符將使其爲假。 |
not | 稱爲邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件爲真則邏輯非運算符將使其爲假。 |
#!/usr/bin/ruby
num1 = 10;
num2 = 20;
# and 稱爲邏輯與運算符。如果兩個操作數都爲真,則條件爲真。
puts (num1 > 10 and num2 > 10)
# or 稱爲邏輯或運算符。如果兩個操作數中有任意一個非假,則條件爲真。
puts (num1 > 10 or num2 > 20)
# && 稱爲邏輯與運算符。如果兩個操作數都非假,則條件爲真。
puts (num1 > 0 && num2 > 10)
# || 稱爲邏輯或運算符。如果兩個操作中有任意一個爲真,則條件爲真。
puts (num1 > 10 || num2 == 20)
# !稱爲邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件爲真則邏輯非運算符將使其爲假。
puts !(num1 > 10 || num2 == 20)
# not 稱爲邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件爲真則邏輯非運算符將使其爲假。
puts not(num1 > 10 && num2 == 20)
Ruby 三元運算符
有一個以上的操作稱爲三元運算符。第一個計算表達式的真假值,然後根據這個結果決定執行後邊兩個語句中的一個。條件運算符的語法如下:
運算符 | 描述 | 實例 |
---|---|---|
? : | 條件表達式 | 如果條件爲真 ? 則值爲 X : 否則值爲 Y |
#!/usr/bin/ruby
num1 = 10;
num2 = 20;
puts (num1 > num2 ? "Y" : "X" )
Ruby 範圍運算符
在 Ruby 中,序列範圍用於創建一系列連續的值 - 包含起始值、結束值(視情況而定)和它們之間的值。
在 Ruby 中,這些序列是使用 ".." 和 "..." 範圍運算符來創建的。兩點形式創建的範圍包含起始值和結束值,三點形式創建的範圍只包含起始值不包含結束值。
運算符 | 描述 | 實例 |
---|---|---|
.. | 創建一個從開始點到結束點的範圍(包含結束點) | 1..10 創建從 1 到 10 的範圍 |
... | 創建一個從開始點到結束點的範圍(不包含結束點) | 1...10 創建從 1 到 9 的範圍 |
Ruby defined? 運算符
defined? 是一個特殊的運算符,以方法調用的形式來判斷傳遞的表達式是否已定義。它返回表達式的描述字符串,如果表達式未定義則返回 nil。
下面是 defined? 運算符的各種用法:
Ruby 點運算符 "." 和雙冒號運算符 "::"
你可以通過在方法名稱前加上類或模塊名稱和 . 來調用類或模塊中的方法。你可以使用類或模塊名稱和兩個冒號 :: 來引用類或模塊中的常量。
:: 是一元運算符,允許在類或模塊內定義常量、實例方法和類方法,可以從類或模塊外的任何地方進行訪問。
請記住:在 Ruby 中,類和方法也可以被當作常量。
你只需要在表達式的常量名前加上 :: 前綴,即可返回適當的類或模塊對象。
如果 :: 前的表達式爲類或模塊名稱,則返回該類或模塊內對應的常量值;如果 :: 前未沒有前綴表達式,則返回主Object類中對應的常量值。
Ruby 運算符的優先級
下表按照運算符的優先級從高到低列出了所有的運算符。
方法 | 運算符 | 描述 |
---|---|---|
是 | :: | 常量解析運算符 |
是 | [ ] [ ]= | 元素引用、元素集合 |
是 | ** | 指數 |
是 | ! ~ + - | 非、補、一元加、一元減(最後兩個的方法名爲 +@ 和 -@) |
是 | * / % | 乘法、除法、求模 |
是 | + - | 加法和減法 |
是 | >> << | 位右移、位左移 |
是 | & | 位與 |
是 | ^ | | 位異或、位或 |
是 | <= < > >= | 比較運算符 |
是 | <=> == === != =~ !~ | 相等和模式匹配運算符(!= 和 !~ 不能被定義爲方法) |
&& | 邏輯與 | |
|| | 邏輯或 | |
.. ... | 範圍(包含、不包含) | |
? : | 三元 if-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | 賦值 | |
defined? | 檢查指定符號是否已定義 | |
not | 邏輯否定 | |
or and | 邏輯組成 |
注意:在方法列標識爲 是 的運算符實際上是方法,因此可以被重載。