为什么两个string之间用空格连接在一起?
为什么在Ruby中工作:
"foo" "bar" # => "foobar"
我不确定为什么string连接而不是给出的语法错误。
我很好奇这是否是预期的行为,以及parsing器是否负责纠缠(两个没有运算符的string被认为是单个string),或者语言定义本身指定了这种行为(隐式concat)。
实现细节可以在Ruby源代码中的parse.y
文件中find。 具体来说, 这里 。
Ruby string
可以是tCHAR
(例如?q
), string1
(例如“q”,“q”或%q {q}),也可以是string1
和string
本身连接的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