昨天提到了數字,發現Ruby 替數字做的分類與生活中不太相同,那文字呢?今天來說說 Ruby資料型別中的文字。
'-字-字-字-字-字-字-字-' #一堆字被串起來,就是字串。
Ruby 會認單引號來當作字串的開始跟結尾,但是如果字串裡需要出現單引號怎麼辦?
'安安你好嗎?I'm fine!'
Ruby看見的字串只有 '安安你好嗎?I'
,還有後面的字串開頭'
,這時候執行程式碼,他會以為你還沒打完,執行時沒有效果!所以為了避免這種問題,就需要在字串裡的單引號前,加上倒斜線(backslash)來避開才行:
'安安你好嗎?I\'m fine!' #仔細看I'm改成I\'m!
=> "安安你好嗎?I'm fine!" #它會自動把斜線拿掉!
那如果字串裡想畫個像 /( ' V ' )/
這樣子的表情符號該怎麼寫呢XD?
'/( \' V \' )/' #就把兩個眼睛前面都加上反斜線就好!
=> "/( ' V ' )/"
這種單引號的字串可以跨很多列,如果你字比較多想要分行寫,你可以:
'安安,
你好!
天氣真不錯!' #因為Ruby都只認單引號當開頭與結尾,所以他自動會幫忙轉成一行,但...
=> "安安,\n你好!\n天氣真不錯!"
字串裡面被包了奇怪的東西\n
,那是 換列字符,如果想要字串裡乾淨一些,可以再派出反斜線:
'安安,'\ #這行行尾要加上反斜線規避
'你好!'\ #這行也要加
'天氣真不錯!' #最後一行可別加!加了他就不知道你到結尾了~
=> "安安,你好!天氣真不錯!"
比起單引號,雙引號彈性多了!雙引號最厲害的是可以在字串裡面插入任意的Ruby 運算式(在Ruby 中稱為『字串安插(string interpolation)』),不過這些運算式,要被放在 #{ }
裡面,例如:
"我喜歡吃#{1+1}個便當!"
=> "我喜歡吃2個便當!"
這好處有很多很多,譬如可以先定義一個變數,再把變數放入字串裡面:
a = 'Ruby!' #先設個變數a等於字串Ruby
"我喜歡:#{a*3}"
=> "我喜歡Ruby!Ruby!Ruby!"
雙引號字串還有另一個特色,就是支援了一些倒斜線規避序列(backslash escape sequence),例如:
"\n" #代表換列(Newline)
"\t" #代表跳格(Tab)
"\s" #代表空格(Space)
"國父\s孫中山先生"
=> "國父 孫中山先生
除了上述提到三個之外,還有很多,有興趣的朋友可以參考這裡。
但其實,當字串裡有出現撇號或引號時,很難直接拿來使用,一直規避就飽了(就像前面的文字符號一樣,很麻煩),所以Ruby 又發明了兩個語法來支援這種狀況:%q
與%Q
。
%q(我是安妮 I'm Annie) #%q作用跟單引號相同
=> "我是安妮 I'm Annie"
%Q(我是安妮,我今天吃#{1+1}碗!) #%Q作用跟雙引號相同
=> "我是安妮,我今天吃2碗!"
%Q(/( ' V ' )/)
=> "/( ' V ' )/"
有了%q
與%Q
,就不需要一直在字串裡規避引號了,方便又清楚(大心)!
來到第六天了,今天要對自己說的,跟昨天的有點像XD 不是偷懶啊,是剛好喜歡這簡簡單單的話:
Do more of what makes you happy.
字串的部分還沒說完,還有字串的運算規則與迭代等等的,繼續努力!