为什么在Ruby中将两个用空格分隔的字符串连接在一起?

为什么这在Ruby中起作用:

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

我不确定为什么将字符串串联起来而不是给出语法错误。

我很好奇这是否是预期的行为,以及解析器是否负责处理问题(两个没有运算符的字符串被视为单个字符串),或者语言定义本身正在指定这种行为(隐式concat)。

Lukas asked 2020-07-19T23:10:11Z
2个解决方案
50 votes

在C和C ++中,字符串文字彼此相邻。 由于这些语言影响了Ruby,所以我猜想它是从那里继承的。

现在已在Ruby中进行了记录:请参见以下答案以及Ruby存储库中的此页面,其中指出:

相邻的字符串文字由解释器自动连接:

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

只要不连续百分号字符串,就可以连接相邻的单引号,双引号百分号字符串的任何组合。

%q{a} 'b' "c" #=> "abc"
"a" 'b' %q{c} #=> NameError: uninitialized constant q
JKillian answered 2020-07-19T23:11:03Z
34 votes

可以在Ruby源代码的string文件中找到实现的详细信息。 具体来说,在这里。

Ruby stringtCHAR(例如?q),2977391590452610051(例如“ q”,“ q”或%q {q}),或者是string1string本身的串联递归定义,会产生字符串表达式 例如"foo" "bar"、2977391590452610055或?f "oo" 'bar'被串联。

Ahmad Sherif answered 2020-07-19T23:10:30Z
translate from https://stackoverflow.com:/questions/23811203/why-do-two-strings-separated-by-space-concatenate-in-ruby