双引号vs单引号

是否有一个特定的时间,当我应该使用""''?

我大部分时间都在使用单引号,因为它更容易输入,但我不确定我是否应该这样做。

例如:get 'user/new' vs. get "user/new"

80202 次浏览

为了回答你的问题,当你想做字符串插值时,你必须使用"":

a = 2
puts "#{a}"

否则使用简单的引号。

另外,如果你想知道在性能方面是否有差异,有一个优秀的关于这个在StackOverflow上的问题。

如果您真的不熟悉RoR,我强烈建议您选择一本像样的Ruby书籍来学习这门语言的基础知识。它将帮助您理解您正在做的事情(并且将使您不再认为Rails是神奇的)。我个人推荐扎实的ruby

" "允许你做字符串插值,例如:

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

在这种情况下,怎么写都没有区别。它们是等价的。此外,你可能想要阅读更多的Ruby指南/教程:)

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

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

类似于打印中的答案“\n”,下面是另一种不同的情况

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

so看起来*被转换为双引号转义字符,而不是单引号。 顺便说一下,在正则表达式中使用它会影响输出 例如, Str.gsub(/正则表达式/,'\1,\2')

在Ruby中,单引号''和双引号""在被求值为字符串方面是不同的。

首先,我想澄清的是,在字符串的字面形式中,引号之间的任何内容都会被计算为字符串对象,这是Ruby string类的一个实例。

因此,'stackoverflow'"stackoverflow"都将计算String类完全没有区别的实例。

的区别

字符串的两种文字形式(单引号或双引号)的本质区别是双引号允许转义序列,而单引号不允许!< / em >

由单引号创建的字符串文字不支持字符串interpollation不转义序列。

一个简单的例子是:

"\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 linter建议在字符串中使用单引号在插值/转义序列的情况下,使用双1。

你想要使用单引号的另一个原因是当你将正则表达式模式作为字符串传递时:

这个regex模式可以工作,因为在单引号中传递:

"123 ABC".match('\d')
=> #<MatchData "1">

这个正则表达式模式将失败,因为在双引号内传递(你必须双转义才能让它工作):

"123 ABC".match("\d")
=> nil