Preface
現在已經看過幾個運算操作了,最基本的就是+、-、*、/操作,當他們用在數值運算時是較為直覺的加、減、乘、除操作。不過,+在Ruby的物件上,往往可以作串接物件的作用,例如串接字串、串接陣列等,結果都是產生新的物件傳回:
* 在Ruby上,則通常可以作加倍的動作,例如:
如果要作數值次方運算,則使用 **。例如:
操作方法
Ruby 還提供了關係運算(Rational operation)、邏輯運算(Logical operation)、位元運算(Bitwise operation)等對物件的運算操作:
其中可作為單元運算的有+、-、~、!等。不僅僅是數值可以使用這些運算操作,在適當的場合,特定的物件也可以使用這些運算操作,例如陣列可以使用&、|來作交集、聯集操作,可以參考 陣列型態 的說明。Ruby中比較特別的是擁有 <=> 運算操作,如果左運算元等於右運算元會傳回0,大於傳回1,小於傳回-1。例如:
在現階段,你可以先知道的是,有些運算操作在物件的動作,其實是可以透過定義方法(Method)來決定該如何進行處理。例如+可以定義+()方法,而%可以定義%()方法:
就算是[]索引運算操作,也是可以透過對應的 []()、[]=() 來定義:
單元運算的方法名稱比較特殊,為運算字元後加上@。例如:
要注意,=不能 使用方法定義,所以其它如+=、-=...等也不能使用方法定義,&&與||具有捷徑運算,你也無法用方法定義,因此& &=與||=也無法使用方法定義。可以使用方法定義的運算操作有+、-、*、/、%、[]、[]=、<<、>>、==、 >、<、>=、<=、===、&、|、^、~、!。
初學目前僅需了解到這邊,在了解如何自定義類別之後,將會再介紹如何定義這些特定的方法,事實上,在 陣列型態 中也看過一個自定義 ^ 運算操作的例子:
在使用邏輯運算 and 與 &&、or 與 ||、not 與 ! 時,要注意到,在 Ruby 中,除了 nil 與 false 為假之外,其它物件都會被評估為真。例如字串 'Justin' 在判斷式中會是真,而空字串 "" 也是物件,在判斷式中會是真,所以空陣列是真、空雜湊是真、而 0 也是真。因此可以利用這個特性,撰寫以下程式:
- main.rb
- if ARGV[0]
- name = ARGV[0]
- else
- name = "Guest"
- end
- puts "Hello, #{name}!"
and 與 &&、or 與 || 有捷徑運算,and 與 && 左運算元若判定為假,則就不會繼續運算右運算元,or 與 || 則是左運算元判斷為真,則不的運算右運算元。當判斷確認時停在哪個運算元,就會傳回該運算元,例如:
利用這個特性,先前的範例程式,可以改寫為以下:
- name = ARGV[0] || "Guest"
- puts "Hello, #{name}!"
* Ruby 手冊 - Method 方法
沒有留言:
張貼留言