字符串和范围

到目前为止,我已经在我的程序中使用了很多字符串(String)。事实上,在本书中的第一个程序中就有字符串。这里再给出来:

  1. puts 'hello world'

在第一个程序中字符串使用单引号作为分隔符,我在第二个程序中则使用了双引号来替换:

  1. print('Enter your name: ')
  2. name = gets()
  3. puts("Hello #{name}")
1strings.rb

双引号字符串要比单引号字符串做更多的工作。尤其地,即便字符串是代码它也有能力去执行。要执行代码的话,请使用 # 字符与大括号将其包含进去。

在上面的示例中,#{name} 在双引号字符串中指示 Ruby 获取 name 变量的值并将其插入到字符串中。所以,如果 name 等于 “Fred”,将会显示 “Hello Fred”。1strings.rb 示例程序提供了双引号字符串中嵌入式表达式的更多示例。

双引号字符串不仅能够执行获取属性或者变量的值,例如 ob.name,还有诸如 2*3 的表达式,方法调用 ob.tenten 是一个方法名)以及转义字符换行符 “\n” 和制表符 “\t” 都能被识别执行。

单引号字符串则不会执行这些。并且,单引号字符串可以使用反斜杠表示下一个字符仅仅表示其字面意思。当一个单引号字符串中包含单引号时,这是非常有用的:

  1. 'It\'s my party'

假设名为 ten 的方法返回值为10,你可以写出下面的代码:

  1. puts("Here's a tab\t a new line\n a calculation #{2*3} and a method-call #{ob.ten}")

由于这是双引号字符串,因此将执行嵌入式表达式,并显示以下内容:

  1. Here's a tab a new line
  2. a calculation 6 and a method-call 10

接下来,让我们看当使用单引号时会发生什么:

  1. puts('Here\'s a tab\t a new line\n a calculation #{2*3} and a method-call #{ob.ten}')

这一次,嵌入式表达式将不会被执行,所以将显示:

  1. Here's a tab\t a new line\n a calculation #{2*3} and a method-call #{ob.ten}