双引号和单引号

我对Ruby真的很陌生,我试图了解是否有特定的时间,我应该使用"" vs ''

我大部分时间都使用单引号,因为input起来比较容易,但我不确定是否应该这样做。

例如get 'user/new'get "user/new"

" "允许你做string插值,例如:

 world_type = 'Mars' "Hello #{world_type}" 

除插值之外,另一个区别在于“转义序列”在单引号中不起作用

 puts 'a\nb' # just print a\nb puts "a\nb" # print a, then b at newline 

要回答你的问题,你必须使用""当你想要做string插值:

 a = 2 puts "#{a}" 

否则使用简单的引号。

另外,如果您想知道性能方面是否存在差异,那么在StackOverflow上有一个很好的问题。

如果你对RoR真的很陌生,我build议你拿起一本体面的Ruby书来学习这门语言的基础知识。 它会帮助你理解你在做什么(并且不会让你觉得Rails是神奇的)。 我个人build议的基础Rubyist 。

Ruby中的单引号和双引号之间有一个区别,就是要对string进行评估。

最初,我想澄清一下,在string的字面forms中引号或引号之间的任何内容都会被视为一个string对象,这是一个Ruby String类的实例。

因此, 'stackoverflow'"stackoverflow"都将评估String类的实例, 完全没有区别

区别

两个字面forms的string(单引号或双引号)之间的本质区别是双引号允许转义序列,而单引号不能!

由单引号创build的string文字不支持string插入也不会转义序列。

一个很好的例子是:

 "\n" # will be interpreted as a new line 

 '\n' # will display the actual escape sequence to the user 

插入单引号根本不起作用:

 '#{Time.now}' => "\#{Time.now}" # which is not what you want.. 

最佳实践

由于绝大多数的Ruby Lintersbuild议在你的string中使用单引号字面值,在插值/转义序列的情况下使用双引号字面值

与打印中的回答“\ n”类似,以下是另一个差异情况

 puts "\1" -> get special character puts '\1' -> get \1 

所以看起来像*被转换为双引号中的转义字符,而不是在单引号中。 顺便说一句,它会影响正则expression式中的输出,例如str.gsub(/正则expression式/,'\ 1,\ 2')

单引号的string不会处理ASCII转义码,并且它们不会进行string插值,而双引号则不会。

逃逸代码示例:

 2.4.0 :004 > puts 'Hello\nWorld' Hello\nWorld 2.4.0 :005 > puts "Hello\nWorld" Hello World 

插值示例:

 2.4.0 :008 > age=27 => 27 2.4.0 :009 > puts "Age: #{age}" Age: 27 

在这个特定的情况下,你怎么写它没有什么区别。 它们是相同的。 另外,你可能想阅读更多的Ruby指南/教程:)