iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
2
自我挑戰組

Ruby菜鳥村村民遊記系列 第 2

遊記ep.2  不思議的Ruby村

在Ruby中 " = " 與 " == " 與 " === " 其實都不一樣?!
舉例來說 a = 1,會解釋成將 1 的值給予到 a 這個變數(容器)內
這時候當我們呼叫 a 的時候 它就會回應你是 1

a 
#一開始直接呼叫 a的時候 他會跟你回應 undefined local variable or method
因為我們根本沒有給予他任何的資訊,所以他會回應說他並未定義為是一個變數或者有一種方法叫做 a

a = 1 
=> 1
a    #呼叫 a
=> 1

今天當我們想要比較的時候,舉例來說 a = 1, b = "1" 在比較中其實我們想知道的是到底這件事是不是成立的呢?

a == b
false #這時候回傳給我們一個boolean值的參數

boolean值只有包含了 true 以及 false兩種結果,以例子來說 我們可以解釋成
a 等於 b 這件事是不成立(false)的,也就是 a 不等於 b
雖然都是 1 但 a的型態其實是 Integer 而b則是 String
那我又該怎麼知道什麼變數是什麼型態?那就直接去問本人吧!

a = 1
b = "1"

a.class? # a 你的類別是什麼?
Integer  #我是Integer(整數)
b.class? # b 你的類別是什麼?
String   #我是String(字串)

在Ruby中可以直接對你想詢問的變數問說你到底是屬於什麼類別,很有對話的感覺。

最後介紹來到 "===",其實現階段對我來說,我是很少有機會用到它的
===算是一種複合式的方法,根據使用情境不同會有不同的效果,
例如可以用來判斷class的種類

String === "hello"
true
Object === "hello"
true
Integer === "hello"
false

可以判斷是否包含在一個範圍內

(1..50) === 9
true
(1..50) === 99
false

最有機會用到可能是在when case的判斷式中

when score
  case (60..100)
  puts "pass!"
  case (0..59)
  puts "fail!"
end
#在這就是判斷 score 滿足不同的case 來做出不同的反應。

其實比較的本質就是去判斷是否成立(true / false),
另外相似的方法還有 eql? 以及 equal? 會在下個章節 與 == 做比較。


上一篇
遊記ep.1 新人 in Ruby村
下一篇
遊記ep.3 不思議的Ruby村-2
系列文
Ruby菜鳥村村民遊記30

尚未有邦友留言

立即登入留言