字符串Literals

字符串对象保存有序的字节序列,通常是字符,通常形成人类可读文本片段。它们'是所有编程语言中非常常见的对象类型,Ruby有许多**和低级方法来创建,访问和操作字符串对象。

字符串通常使用字符串文字创建。文字是Ruby语言中创建特定类型对象的特殊语法。例如,23是创建Fixnum对象的文字。至于字符串literals,有几种形式。

16单引号和双引号字符串17 18

大多数语言都有类似于此的字符串文字,所以这可能很熟悉。引号的类型,'(单引号,撇号或硬引号)和"(双引号或软引号)用于包围字符串literals,它们之间的任何内容都将变成字符串对象。以下示例演示了这一点。

但单引号和双引号之间存在一些差异。双引号或软引号使一些魔术能够在场外发生。最有用的是在字符串内部插值,用于将变量的值插入字符串的中间。这是通过使用##{…}序列来实现的。以下示例将要求您提供姓名并欢迎您,使用插值将您的姓名插入到打印'的字符串文字中。

请注意,任何代码都可以在大括号内,而不仅仅是变量名称。Ruby将评估该代码,无论返回什么,它都会尝试将其插入字符串中。所以你可以很容易地说"你好老年人健康知识讲座#{gets.chomp}",忘记name变量。但是,比较好不要在大括号内放长表达式。

单引号,撇号或硬引号更具限制性。罪之里面单引号,Ruby除了转义单个引号字符和反划线本身(分别\'\ \)外,不会执行插值或逃逸序列。如果您不打算使用插值,建议多次使用单引号。

以下示例将尝试在单引号内插入变量。

如果你运行这个你'不会出错,但会打印什么?

科普_1

插值序列未通过。

我什么时候应该使用单引号和双引号

这是一个风格问题。有些人一直喜欢使用双引号,除非它们变得不方便。其他人宁愿使用单引号,除非插值行为是有意的。关于始终使用双引号,没有任何固有的危险,但它确实使一些代码更容易阅读。您不需要'如果知道代码中没有插值,则在读取代码时需要读取字符串,因为您知道字符串本身会产生'没有任何副作用。所以你使用哪个字符串文字形式取决于你,这里没有真正的对错方式。

逃逸序列

如果用字符串文字表示要包含引用字符,该怎么办?例如,字符串&##34;Steve said"Moo!"赢得't工作。也不会'可以'触摸这个!'。这两个字符串都在字符串内部包含引用字符,有效地结束字符串文字并导致语法错误。您可以切换引用字符,如'Steve said"Moo!"',但这并不能真正解决问题。相反,您可以逃脱字符串中的任何引用字符,它将失去其特殊含义(在这种情况下,特殊含义是关闭字符串)。

为了逃脱一个角色,用ba预先结束它ckslach字符。反斜杠字符告诉Ruby忽略下一个字符可能具有的任何特殊含义。如果它'是匹配的引用字符,请不要't结束字符串。如果它'是一个散列符号,请开始一个插值块。以下示例演示了使用反斜杠来逃脱特殊字符。

反斜杠字符可用于从以下字符中删除任何特殊含义,但令人困惑的是,它也可用于表示双引号字符串中的特殊行为。这些特殊行为中的大多数都与插入无法直观输入或表示的字符和字节序列有关。并非所有字符串都是字符串,或者可能包含用于终端而不是用户的控制序列。Ruby使您能够使用反斜杠逃逸字符插入这些类型的字符串。

  • \ n-一个newline字符。puts方法会自动执行此操作,但如果要在字符串的中间插入一个,或者字符串用于puts方法以外的其他内容,则可以使用此方法在字符串中插入新行。
  • \ t-制表符字符。制表符字符将光标移动到(在大多数终端上)到8的倍数,因此这对于显示表格数据非常有用。但是,有更好的方法可以做到这一点,使用制表符字符被认为有点古老或hackish。
  • \ nnn-反斜杠后跟3个数字将表示由3个八位数字表示的ASCII字符。为什么octal?主要是出于历史原因。
  • \ xnn-反斜杠,x和2个十六进制数字。与octal版本相同,仅具有十六进制数字。

你可能永远不会使用其中的大部分,但知道它们存在。并且还请记住,它们只能用双引号字符串表示。

下一页讨论多行字符串和字符串literals的替代语法。

多行字符串

大多数语言不允许多行字符串literals,但Ruby允许。'不需要结束字符串并为下一行附加更多字符串,Ruby使用默认语法处理多行字符串literals。

替代语法

与大多数其他literals一样,Ruby为字符串literals提供了另一种语法。例如,如果您在literals中使用了很多引用字符,则可能需要使用此语法。当你使用这个语法是一个风格问题时,它们通常不需要字符串。

要使用替代语法,请对单个带引号的字符串%q{…}使用以下序列。同样,对双引号字符串%Q{…}使用以下语法。此备用语法遵循与其"normal"cousins相同的规则。此外,请注意,您可以使用任何希望的字符而不是大括号。如果使用括号,方括号,角括号或括号,则匹配字符将以文字结尾。如果你不想使用匹配的字符,你可以使用任何其他符号(不是字母或数字)。文字将用另一个相同的符号封闭。以下示例向您展示了使用此语法的几种方法。

备用语法也可用作多行字符串。