我最近意识到,如果你并置了一系列Ruby字符串文字(例如'a' "b" 'c'
),它就相当于这些字符串文字的串联。但是,我无法在任何地方找到此语言功能。我使用术语“并置”和“连接”进行了搜索,但只在几个StackOverflow响应中找到了对它的引用。谁能指出我一个明确的参考?
答案 0 :(得分:10)
这是Ruby附带的RDoc中的now officially documented。
下次构建文档时,更改将传播到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
我已在pull request上打开ruby/ruby并添加了文档。
如果合并此拉取请求,它将自动更新http://www.ruby-doc.org。如果发生这种情况,我会更新这篇文章。 ^ _ ^
我在网上发现的唯一其他提及是:
答案 1 :(得分: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"
答案 2 :(得分:3)
除pickaxe reference外,还有一些unit tests:
# 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}")
答案 3 :(得分:0)
如果你想在多行中打破一个长的单引号String-literal而不在其中嵌入新行。
简单地将其分解为多个相邻的字符串文字,ruby解释器将在解析过程中将它们连接起来。
str = "hello" "all"
puts str #=> helloall
请记住,您必须转义文字之间的换行符,以便ruby不会将新行解释为语句终止符。
str = "hello" \
" all" \
" how are you."
puts str #=> hello all how are you