是否有特定的时间我应该使用""
vs ''
?
我大部分时间都在使用单引号,因为它更容易输入,但我不确定我是否应该这样做。
例如get 'user/new'
与get "user/new"
是否有特定的时间我应该使用""
vs ''
?
我大部分时间都在使用单引号,因为它更容易输入,但我不确定我是否应该这样做。
例如get 'user/new'
与get "user/new"
" "
允许您进行字符串插值,例如:
world_type = 'Mars'
"Hello #{world_type}"
除了插值,另一个区别是“转义序列”在单引号中不起作用
puts 'a\nb' # just print a\nb
puts "a\nb" # print a, then b at newline
Ruby 中的单''
引号和双引号之间""
在对字符串求值方面有所不同。
最初,我想澄清一下,在字符串的文字形式中,单引号或双引号之间的任何内容都会被评估为字符串对象,它是 Ruby String 类的一个实例。
因此,'stackoverflow'
两者"stackoverflow"
都将评估 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 Linters 建议对字符串使用单引号文字,并在插值/转义序列的情况下使用双引号。
要回答您的问题,您必须""
在要进行字符串插值时使用:
a = 2
puts "#{a}"
否则使用简单的引号。
此外,如果您想知道在性能方面是否存在差异,StackOverflow 上有一个很好的问题。
如果你真的是 RoR 的新手,我建议你选择一本像样的 Ruby 书来学习该语言的基础知识。它会帮助你理解你在做什么(并且不会让你认为 Rails 是神奇的)。我个人推荐The Well grounded Rubyist。
单引号字符串不处理 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
与打印中的答案“\n”类似,以下是另一种不同的情况
puts "\1" -> get special character
puts '\1' -> get \1
所以看起来 * 被转换为双引号中的转义字符,但不是单引号。顺便说一句,在正则表达式中使用时会影响输出,例如 str.gsub(/regular expression/, '\1,\2')
您想要使用单引号的另一个原因是在将正则表达式模式作为字符串传递时:
此正则表达式模式将起作用,因为在单引号内传递:
"123 ABC".match('\d')
=> #<MatchData "1">
此正则表达式模式将失败,因为在双引号内传递(您必须对其进行双重转义才能使其工作):
"123 ABC".match("\d")
=> nil
在这种特定情况下,您如何编写它没有区别。它们是等价的。此外,您可能想阅读更多 Ruby 指南/教程 :)