是否有特定时间我应该使用
""
与 ''
?
我大部分时间都使用单引号,因为这样更容易输入,但我不确定是否应该这样做。
例如
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..
最佳实践
,并且在插值/转义序列的情况下使用双引号。
puts "\1" -> get special character
puts '\1' -> get \1
所以看起来 * 被转换为双引号中的转义字符,但不是单引号中的转义字符。 BTW,在正则表达式中使用时会影响输出 例如。, str.gsub(/正则表达式/, ' , ')
此正则表达式模式将起作用,因为在单引号内传递:
"123 ABC".match('\d')
=> #<MatchData "1">
此正则表达式模式将失败,因为在双引号内传递(您必须对其进行双重转义才能使其正常工作):
"123 ABC".match("\d")
=> nil