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