[Ruby 中文教程 By Chris Pine] 2.文字
翻译:阳光
原文来自 <https://pine.fm/LearnToProgram/?Chapter=02>
2.文字
好的,我们已经学会数字了,那字母呢?单词呢?文本呢?
在程序中,我们把一些字母的组合称为字符串strings(string是“用带系上”的意思,你可以把输出的字母看成是被系在一个旗杆上)。为了更好地看出代码的哪一部分是字符串,我会将字符串设置为红色。这是一些字符串:
'Hello.'
'Ruby rocks.'
'5 is my favoritenumber... what is yours?'
'Snoopy says #%^?&*@!when he stubs his toe.'
' '
''
如你所见,字符串可以包含标点、数字、符号和空格……而不仅仅是字母。最后一个字符串什么都没有,我们叫它空字符串。
输入:
puts 'Hello, world!'
puts ''
puts 'Good-bye.'
返回:
Hello, world!
Good-bye.
非常好,现在你自己试试。
字符串的计算法则
跟你可以用数字来计算一样,你也可以用字符串来运算!好吧,只是一部分运算可以……至少你可以用字符串做加法。让我们试试将两个字符串加起来,看看会输出什么效果。
输入:
puts 'I like'+ 'apple pie.'
返回:
I likeapple 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
输出:
batting her eyes
(开玩笑的……它实际上会输出这个:)
blink blink blink blink
如果你想一想,这个确实很有道理。毕竟,7*3就是等于7+7+7,所以'moo'*3自然就是'moo'+'moo'+'moo'了。
12与'12'
在我们进一步学习之前,我们要确保自己明白数字与位数的区别。12是一个数字,'12'是一个有两个位数的字符串。
让我们再来熟悉一下:
输入:
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: can't convert Fixnum into String>
嗯……一个错误信息。问题是你不能真的用一个数字去加上一个字符串,或者用一个字符串去乘以另一个字符串。这跟输入这种东西差不多:
puts 'Betty'+ 12
puts 'Fred' * 'John'
一些需要注意的事情:你可以在程序里写'pig'*5,它只表示把五个pig连在一起。但是,你不能写5*'pig',因为那意味着用'pig'来设置数字5,这是不可能的。
最后,如果我们想让程序输出You're swell怎么办?我们可以试试这个:
输入:
puts 'You'reswell!'
好吧,这不会管用的,我甚至不会尝试输入它。计算机肯定会以为我们已经在You之后就把字符串结束了(这也是为什么一个能自动标记颜色的文本编辑器是个很好的工具)。所以我们怎么能让计算机把这个字符串输出完整呢?我们必须避开撇号,像这样:
输入:
puts 'You\'re swell!'
输出:
You're swell!
反斜杠是一个规避符。换句话说,如果你一个反斜杠后连着一个字符,那它们会结合成一个新的字符。反斜杠规避的唯一东西就是撇号和反斜杠本身(如果你想想的话,规避符肯定要连自己一起规避掉)。我举了一些例子:
输入:
puts 'You\'re swell!'
puts 'backslash at theend of a string: \\'
puts 'up\\down'
puts 'up\down'
输出:
You're swell!
backslash at the end of a string: \
up\down
up\down
反斜杠不会规避“d”,但是会规避它自己,最后两个字符串很能说明问题,在代码里它们并不相同,但在你的电脑里它们却是一样的。
如果你有任何问题,继续阅读就好了!我毕竟不能把这一页的所有问题都回答了。