前面我們已經(jīng)了解了Ruby中數(shù)字的使用讨盒,那么字母呢?以及單詞和文本怎么使用飒焦?
在程序中我們把由字母連在一起的這個串成為“字符串”(你可以聯(lián)想到打印出來的幾個字母用一個橫幅串起來)為了方便區(qū)別在代碼中哪部分是字符串八孝,我把字符串部分標(biāo)綠。下面是一些例子:
'Hello.'
'Ruby rock.'
'5 is my favorite number... what is yours?'
'Snoopy says #%^?&*@! when he stubs his toe.'
' '
你可以看出找蜜,字符串是可以包含標(biāo)點、數(shù)位稳析、符號及空格……而不僅僅是字母洗做。最后一個字符串里面沒有含任何內(nèi)容,我們把這樣的叫做空字符串迈着。
我們之前用puts
來輸出過數(shù)字了竭望,現(xiàn)在我們用字符串試試:
puts 'Hello,world!'
puts ' '
puts 'Good-bye.'
Hello邪码,world!
Good-bye.
看來程序運行得還不錯裕菠,現(xiàn)在可以試試你自己想的例子。
字符串的運算
既然數(shù)字之間可以運算闭专,你也可以進(jìn)行字符串運算奴潘!好吧,只是部分……當(dāng)然你可以進(jìn)行字符串的加法影钉。讓我們試著做兩個字符串的加法運算來看看之后會有什么結(jié)果:
puts 'I like' + 'apple pie.'
哎呦画髓!我忘了在 “I like” 和 “apple pie.”之間放空格了∑轿空格通常是沒啥影響的奈虾,但是在字符串中就會很重要。(可見有句話說的很對:電腦不會按我們的想法去做事,只有我們教它們才可以)
下面讓我們再試試:
puts 'I like ' + 'apple pie.'
puts 'I like' + ' apple pie.'
I like apple pie.
I like apple pie.
(正如你所見肉微,我把空格加在兩者中哪個字符串中是沒啥影響的)
既然你可以進(jìn)行字符串加法匾鸥,你也能做字符串乘法!(不過需要用到數(shù)字)看看下面這個例子:^_-)≡
puts 'blink ' * 4
這怎么可能 ミ?Д?彡 碉纳!眨四次眼睛就不理人了勿负?好吧,開個玩笑……實際輸出是:
如果你稍微思考一下劳曹,上面的輸出實際上是有道理的奴愉。別忘了,7*3 實際的計算過程是 7+7+7铁孵,所以 'moo ' *3 是表示‘moo ’ + ‘moo ’ + ‘moo ’.
(牛叫3聲 哞 哞 哞 -----譯者注)
12 與 ' 12 '
在我們進(jìn)行下一步前锭硼,我們需要確定我們理解數(shù)字和數(shù)位的區(qū)別。12 是數(shù)字蜕劝,而 ‘12’是2個數(shù)位的字符串账忘。
我們先試試下面這個例子:
puts 12 + 12
puts '12' + '12'
puts '12 + 12'
輸出為:
24
1212
12 + 12
又比如:
puts 2 * 5
puts '2' * 5
puts '2 * 5'
輸出為:
10
22222
2 * 5
上面的例子區(qū)別是很明顯的,但如果你將字符串和數(shù)字組合的時候不太注意的話熙宇,你可能會出問題的……
遇到的問題
學(xué)習(xí)到現(xiàn)在你可能已經(jīng)碰到一些沒法運行的問題鳖擒。如果你沒碰到過,下面有幾個例子:
puts '12' + 12
puts '2' * '5'
輸出為:
#<TypeError: no implicit conversion of Fixnum into String>
嗯……一條出錯消息烫止。這里的問題是你不能把一個數(shù)字加到一個字符串上蒋荚,或乘以一個字符串到另一個字符串上。比如像下面這個例子所示的馆蠕,這樣做沒任何意義:
puts 'Betty' + 12
puts 'Fred' * 'John'
其他值得一提的是:你可以在程序中寫 ‘pig’ *
5,這是表示5組 ‘pig’ 字符串加到一起期升,但是你不可以寫成5*
‘pig’ ,而這是表示 ‘pig’ 組數(shù)字 5,這樣是沒意義的互躬。
另外播赁,假如我想輸出 You're swell!,該如何寫呢?試試如下:
puts 'You're swell!'
好吧吼渡,程序不會成功運行的容为,我甚至都沒必要去運行它。電腦會認(rèn)為我們想輸出字符串(這就是為什么我推薦使用自帶語法高亮的代碼編輯器)寺酪。那么我們怎么樣讓電腦理解我們想讓字符串保持整體輸出呢坎背?我們不得不跳過撇號,像下面這樣:
puts 'You\'re swell!'
這里反斜線是換碼符號寄雀,也就是說當(dāng)你用到一個反斜線和另一個字符得滤,它通常會將其轉(zhuǎn)換成一個新的符號,但是唯獨當(dāng)使用反斜線和撇號在一起時會變成忽略符號(如果你思考一下盒犹,換碼符號必須忽略他們自己)懂更。下面舉幾個例子:
puts 'You\'re swell!'
puts 'backslash at the end of a string: \\'
puts 'up\\down'
puts 'up\down'
從上面的輸出可以看出:反斜線碰到 ‘d’的時候不會忽略自己,但是碰到另一個反斜線時會忽略它本身眨业。最后兩個字符串是相同的,雖然在代碼上是不同沮协,但是輸出到屏幕上是一樣的坛猪。
通過以上內(nèi)容,如果你還有些疑惑的話皂股,盡管繼續(xù)進(jìn)行下一節(jié)學(xué)習(xí)墅茉!畢竟我沒法在這里解答你所有的問題。(〃''〃)