12

我最近意识到,如果您将一系列 Ruby 字符串文字(例如'a' "b" 'c')并置,则相当于将这些字符串文字串联起来。但是,我在任何地方都找不到此语言功能的文档。我使用术语“并置”和“连接”进行了搜索,但只在几个 StackOverflow 响应中找到了对它的引用。谁能给我一个明确的参考?

4

4 回答 4

10

更新

现在正式记录在 Ruby 附带的 RDoc 中。

下次构建文档时,更改将传播到RubyDoc 。

添加的文档:

Adjacent string literals are automatically concatenated by the interpreter:

  "con" "cat" "en" "at" "ion" #=> "concatenation"
  "This string contains "\
  "no newlines."              #=> "This string contains no newlines."

Any combination of adjacent single-quote, double-quote, percent strings will
be concatenated as long as a percent-string is not last.

  %q{a} 'b' "c" #=> "abc"
  "a" 'b' %q{c} #=> NameError: uninitialized constant q

原来的

目前,官方 ruby​​ 文档中没有任何内容,但我认为应该如此。正如评论中指出的那样,文档的逻辑位置是:http ://www.ruby-doc.org/core-2.0/doc/syntax/literals_rdoc.html#label-Strings

我已经在ruby​​/ruby上打开了一个拉取请求,并添加了文档。

如果这个拉取请求被合并,它会自动更新http://www.ruby-doc.org。如果/何时发生这种情况,我会更新这篇文章。^_^

我在网上找到的唯一其他提及的是:

于 2013-08-12T18:59:52.327 回答
3

The Ruby Programming Language, page 47中有一个参考。

看起来它是故意在解析器中的,对于您想要在代码中拆分字符串文字但不想付出连接它们(并创建 3 个或更多字符串)的代价的情况。没有换行符的长字符串,并且不需要行长的破坏代码,就是一个很好的例子

text = "This is a long example message without line breaks. " \
    "If it were not for this handy syntax, " \
    "I would need to concatenate many strings, " \
    "or find some other work-around"
于 2013-08-12T18:33:11.440 回答
3

除了镐参考之外,还有一些单元测试

# compile time string concatenation
assert_equal("abcd", "ab" "cd")
assert_equal("22aacd44", "#{22}aa" "cd#{44}")
assert_equal("22aacd445566", "#{22}aa" "cd#{44}" "55" "#{66}")
于 2013-08-12T18:59:16.970 回答
0

如果你想在多行中打破一个长的单引号字符串文字而不在其中嵌入新行。

只需将其分解为多个相邻的字符串文字,ruby 解释器将在解析过程中将它们连接起来。

str = "hello" "all"

puts str #=> helloall

但请记住,您必须转义文字之间的换行符,以便 ruby​​ 不会将换行符解释为语句终止符。

str = "hello" \
      " all" \
      " how are you."

puts str #=> hello all how are you
于 2015-01-08T07:00:15.457 回答