问题描述
|
我真的是Ruby的新手,我想了解是否在特定的时间应该使用
\"\"
和\'\'
。
我大部分时间都在使用单引号,因为它更容易键入,但是我不确定是否应该这样做。
例如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
, 要回答您的问题,当您要进行字符串插值时,必须使用\"\"
:
a = 2
puts \"#{a}\"
否则,请使用简单的引号。
另外,如果您想知道性能是否存在差异,那么StackOverflow上还有一个很好的问题。
而且,如果您真的是RoR的新手,我强烈建议您拿起一本不错的Ruby书来学习该语言的基础知识。它将帮助您了解自己在做什么(并使您避免认为Rails是魔术)。我个人推荐The Well扎根的Rubyist。
, 在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所建议的那样,在字符串中使用单引号文字,在插值/转义序列的情况下使用双引号文字。
,
用单引号引起来的字符串不处理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(/正则表达式/,\'\\ 1,\\ 2 \')
, 您希望使用单引号的另一个原因是在将正则表达式模式作为字符串传递时:
此正则表达式模式将起作用,因为在单引号内进行了传递:
\"123 ABC\".match(\'\\d\')
=> #<MatchData \"1\">
此正则表达式模式将失败,因为在双引号内进行了传递(您必须对其进行两次转义才能使其正常工作):
\"123 ABC\".match(\"\\d\")
=> nil
, 在这种情况下,编写方式没有任何区别。它们是等效的。另外,您可能想阅读更多的Ruby指南/教程:)