繁体   English   中英

双引号与单引号

[英]Double vs single quotes

我应该在特定时间使用""还是''

我大部分时间都使用单引号,因为它更容易打字,但我不确定是否应该使用。

例如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 Linter 建议对您的字符串使用单引号文字,在插值/转义序列的情况下使用双引号

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

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 指南/教程 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM