前面我们已经了解了Ruby中数字的使用,那么字母呢?以及单词和文本怎么使用?
在程序中我们把由字母连在一起的这个串成为“字符串”(你可以联想到打印出来的几个字母用一个横幅串起来)为了方便区别在代码中哪部分是字符串,我把字符串部分标绿。下面是一些例子:
'Hello.'
'Ruby rock.'
'5 is my favorite number... what is yours?'
'Snoopy says #%^?&*@! when he stubs his toe.'
' '
你可以看出,字符串是可以包含标点、数位、符号及空格……而不仅仅是字母。最后一个字符串里面没有含任何内容,我们把这样的叫做空字符串。
我们之前用puts
来输出过数字了,现在我们用字符串试试:
puts 'Hello,world!'
puts ' '
puts 'Good-bye.'
Hello,world!
Good-bye.
看来程序运行得还不错,现在可以试试你自己想的例子。
字符串的运算
既然数字之间可以运算,你也可以进行字符串运算!好吧,只是部分……当然你可以进行字符串的加法。让我们试着做两个字符串的加法运算来看看之后会有什么结果:
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.
(正如你所见,我把空格加在两者中哪个字符串中是没啥影响的)
既然你可以进行字符串加法,你也能做字符串乘法!(不过需要用到数字)看看下面这个例子:^_-)≡
puts 'blink ' * 4
这怎么可能 ミ゚Д゚彡 !眨四次眼睛就不理人了?好吧,开个玩笑……实际输出是:
如果你稍微思考一下,上面的输出实际上是有道理的。别忘了,7*3 实际的计算过程是 7+7+7,所以 'moo ' *3 是表示‘moo ’ + ‘moo ’ + ‘moo ’.
(牛叫3声 哞 哞 哞 -----译者注)
12 与 ' 12 '
在我们进行下一步前,我们需要确定我们理解数字和数位的区别。12 是数字,而 ‘12’是2个数位的字符串。
我们先试试下面这个例子:
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
上面的例子区别是很明显的,但如果你将字符串和数字组合的时候不太注意的话,你可能会出问题的……
遇到的问题
学习到现在你可能已经碰到一些没法运行的问题。如果你没碰到过,下面有几个例子:
puts '12' + 12
puts '2' * '5'
输出为:
#<TypeError: no implicit conversion of Fixnum into String>
嗯……一条出错消息。这里的问题是你不能把一个数字加到一个字符串上,或乘以一个字符串到另一个字符串上。比如像下面这个例子所示的,这样做没任何意义:
puts 'Betty' + 12
puts 'Fred' * 'John'
其他值得一提的是:你可以在程序中写 ‘pig’ *
5,这是表示5组 ‘pig’ 字符串加到一起,但是你不可以写成5*
‘pig’ ,而这是表示 ‘pig’ 组数字 5,这样是没意义的。
另外,假如我想输出 You're swell!,该如何写呢?试试如下:
puts 'You're swell!'
好吧,程序不会成功运行的,我甚至都没必要去运行它。电脑会认为我们想输出字符串(这就是为什么我推荐使用自带语法高亮的代码编辑器)。那么我们怎么样让电脑理解我们想让字符串保持整体输出呢?我们不得不跳过撇号,像下面这样:
puts 'You\'re swell!'
这里反斜线是换码符号,也就是说当你用到一个反斜线和另一个字符,它通常会将其转换成一个新的符号,但是唯独当使用反斜线和撇号在一起时会变成忽略符号(如果你思考一下,换码符号必须忽略他们自己)。下面举几个例子:
puts 'You\'re swell!'
puts 'backslash at the end of a string: \\'
puts 'up\\down'
puts 'up\down'
从上面的输出可以看出:反斜线碰到 ‘d’的时候不会忽略自己,但是碰到另一个反斜线时会忽略它本身。最后两个字符串是相同的,虽然在代码上是不同,但是输出到屏幕上是一样的。
通过以上内容,如果你还有些疑惑的话,尽管继续进行下一节学习!毕竟我没法在这里解答你所有的问题。(〃''〃)