鐵 人
Ruby女孩(6):Ruby的"-字-字-字-字-字-"
2014.Oct.06

昨天提到了數字,發現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.

字串的部分還沒說完,還有字串的運算規則與迭代等等的,繼續努力!

Ruby女孩(7):原來字串也可以比大小?
2014.Oct.07
Ruby女孩(5):Ruby的數學跟老師教的數學都不一樣?
2014.Oct.05
comments powered by Disqus