为什么两个string之间用空格连接在一起?

为什么在Ruby中工作:

"foo" "bar" # => "foobar" 

我不确定为什么string连接而不是给出的语法错误。

我很好奇这是否是预期的行为,以及parsing器是否负责纠缠(两个没有运算符的string被认为是单个string),或者语言定义本身指定了这种行为(隐式concat)。

实现细节可以在Ruby源代码中的parse.y文件中find。 具体来说, 这里 。

Ruby string可以是tCHAR (例如?q ), string1 (例如“q”,“q”或%q {q}),也可以是string1string本身连接的recursion定义,诸如"foo" "bar"'foo' "bar""foo" "bar"类的expression被连接起来。

在C和C ++中,相邻的string文字 被连接在一起 。 由于这些语言影响了Ruby,我猜想它是从那里inheritance的。

现在在Ruby中有logging: 在Ruby回购中看到这个答案和这个页面,其中指出:

相邻的string文字会被解释器自动连接起来:

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

只要百分比string不是最后一个,相邻的单引号,双引号,百分号string的任何组合都将被连接在一起。

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