双重与单引号

时间:2011-06-18 10:12:45

标签: ruby string syntax

我是Ruby的新手,我正在努力了解是否应该使用"" vs ''的具体时间。

我一直在使用单引号,因为它更容易输入,但我不确定是否应该。

e.g。 get 'user/new' vs get "user/new"

8 个答案:

答案 0 :(得分:183)

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

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

答案 1 :(得分:125)

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

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

答案 2 :(得分:38)

要回答您的问题,当您想要进行字符串插值时,必须使用""

a = 2
puts "#{a}"

否则请使用简单的引号。

此外,如果您想知道性能方面是否存在差异,那么有一个很好的question about this on StackOverflow.

如果你是RoR的新手,我恳请你学习一本体面的Ruby书来学习该语言的基础知识。它将帮助您了解您正在做的事情(并且会让您不再认为Rails是神奇的)。我个人推荐The Well grounded Rubyist

答案 3 :(得分:28)

Ruby中单个''和双引号""之间的区别在于要对字符串求值的内容。

最初,我想澄清一点,字符串的字面形式 单个引号之间的任何内容都被评估为string对象,它是Ruby String类的一个实例。

因此,'stackoverflow'"stackoverflow"都将评估字符串类的实例,而没有任何区别

差异

两种字面形式的字符串(单引号或双引号) 之间的本质区别在于双引号允许转义序列,而单引号则不允许!

由单引号创建的字符串文字不支持字符串interpollat​​ion 不会转义序列。

一个简洁的例子是:

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

答案 4 :(得分:6)

  

单引号字符串不处理ASCII转义码(\ n,\ t等)和它们   当双引号同时执行两者时,不要进行字符串插值。

逃脱代码示例:

2.4.0 :004 >   puts 'Hello \n World'
Hello \n World

2.4.0 :005 > puts "Hello \n World"
Hello
World

插值示例:

2.4.0 :008 >   age=27
 => 27

2.4.0 :009 > puts 'Age: #{age}'
Age: #{age}

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

答案 5 :(得分:3)

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

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

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

答案 6 :(得分:0)

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

此正则表达式模式将起作用,因为在单引号内进行了传递:

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

此正则表达式模式将失败,因为在双引号内进行了传递(您必须对其进行两次转义才能使其正常工作):

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

答案 7 :(得分:-6)

在这种特殊情况下,你如何写它没有区别。它们是等价的。此外,您可能还想阅读更多Ruby指南/教程:)