为什么这在Ruby中有效:

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

我不确定为什么字符串被连接起来,而不是给出语法错误.

我很好奇这是否是预期的行为,是解析器负责争论(两个没有运算符的字符串被视为单个字符串),还是语言定义本身指定了这种行为(隐式concat).

推荐答案

实现细节可以在Ruby源代码中的parse.y文件中找到.具体来说是here.

Ruby string可以是tCHAR(例如?q)、string1(例如"q"、"q"或%q{q}),也可以是string1string本身串联的递归定义,这会导致字符串表达式(例如"foo" "bar"'foo' "bar"?f "oo" 'bar')被串联.

Ruby相关问答推荐

MongoDB通过Brew Services";未定义的方法`plist_starting';";

使用 Drive API 创建空文件

Ruby 的 .() 运算符是如何工作的?

Symfony 2assets资源过滤器异常中的指南针

Sinatra + Bundler?

如何替换 ruby​​ 中模式的每个实例?

如何在不将换行符粘贴到字符串中的情况下使用puts添加额外的换行符?

需要Ruby

如何按长度对 Ruby 字符串数组进行排序?

jekyll 调试或打印所有变量

在 ruby​​ 中访问嵌套哈希的元素

如何使用 RVM 重新编译 ruby​​?

确定字符串数组是否包含ruby中的某个子字符串

在 Ruby 中,有没有办法使用 hash.each_with_index do |[k,v], i| 之类的东西?

如何按字母顺序排列忽略大小写的数组?

Ruby 将标题发布到 slug

Ruby on Rails switch

让 sidekiq 立即执行作业(job)

如何使用 minitest 运行所有测试?

通过多个分隔符拆分字符串