Ruby on rails schema.rb中的双引号字符串

Ruby on rails schema.rb中的双引号字符串,ruby-on-rails,rubocop,Ruby On Rails,Rubocop,这可能是一个有点琐碎的问题,但总是困扰着我: Rails在schema.rb中使用双引号字符串而不是单引号字符串(如rubocop所建议的)有什么具体原因吗?原因是schema.rb使用双引号是因为大多数格式化都是通过调用一些预定义字符串来完成的,例如: # schema_dumper.rb:91 stream.puts " enable_extension #{extension.inspect}" 并打印带双引号的字符串,即: "foo".inspect #=> "\"foo\""

这可能是一个有点琐碎的问题,但总是困扰着我:


Rails在schema.rb中使用双引号字符串而不是单引号字符串(如rubocop所建议的)有什么具体原因吗?

原因是
schema.rb
使用双引号是因为大多数格式化都是通过调用一些预定义字符串来完成的,例如:

# schema_dumper.rb:91
stream.puts "  enable_extension #{extension.inspect}"
并打印带双引号的字符串,即:

"foo".inspect
#=> "\"foo\""

也就是说,RuboCop是用来捕捉人为错误的,因此不需要包含由框架生成的文件,这些文件不需要手动编辑。(您仍然希望检查使用Rails生成器创建的应用程序文件。)

您可能会发现,通过将架构文件添加到
.rubocp.yml
文件中,将其从Rubocp的检查中排除是很有用的:

AllCops:
  Exclude:
    - db/schema.rb

因为单引号字符串实际上并不是更快。单引号字符串cop主要是一个固执己见的B。同一帖子中的另一个答案是,因为它遵循惯例。你有没有看过“煎饼”的馅饼。检查一下
String#inspect
使用双引号
#inspect
是一种非常简单的方法来处理字符串中的转义,该字符串将被转储到Ruby源代码中。老实说,我考虑的不是性能优势,而是语义优势。当我看到双引号时,我有点期待字符串插值或其他有趣的东西。也许,只有我一个人!:)@max Rubocop的创建者Bozdihar Batsov似乎也同意这一点:这是因为大多数人都会在数据库中使用合理的名称,但AR不能真正假设所有的表、列、约束。。。名字是合理的。我支持使用双引号字符串作为转义或插值即将到来的信号,但是很多Ruby用户使用双引号,因为这可能是他们学到的。有趣。谢谢你的回答。:)