为什么这在Ruby中起作用:
"foo" "bar"
# => "foobar"
我不确定为什么连接字符串而不是给出语法错误。
我很好奇这是否是预期的行为,以及它是否是解析器负责争吵的东西(没有运算符的两个字符串被认为是单个字符串)或者语言定义本身指定了这种行为(隐式的concat)。
答案 0 :(得分:49)
在C和C ++中,string literals彼此相邻are concatenated。由于这些语言影响了Ruby,我猜它会从那里继承。
现在Ruby中有记录:请参阅this answer和this page in the Ruby repo,其中说明:
相邻的字符串文字由解释器自动连接:
"con" "cat" "en" "at" "ion" #=> "concatenation" "This string contains "\ "no newlines." #=> "This string contains no newlines."
只要百分比字符串不是最后一个,相邻的单引号,双引号,百分比字符串的任何组合都将连接在一起。
%q{a} 'b' "c" #=> "abc" "a" 'b' %q{c} #=> NameError: uninitialized constant q
答案 1 :(得分:34)
实现细节可以在Ruby源代码的parse.y
文件中找到。具体而言,here。
Ruby string
是tCHAR
(例如?q
),string1
(例如“q”,“q”或%q {q}) ,或string1
和string
本身串联的递归定义,这会导致串联"foo" "bar"
,'foo' "bar"
或?f "oo" 'bar'
等字符串表达式。