双引号和单引号
我对Ruby真的很陌生,我试图了解是否有特定的时间,我应该使用""
vs ''
。
我大部分时间都使用单引号,因为input起来比较容易,但我不确定是否应该这样做。
例如get 'user/new'
与get "user/new"
" "
允许你做string插值,例如:
world_type = 'Mars' "Hello #{world_type}"
除插值之外,另一个区别在于“转义序列”在单引号中不起作用
puts 'a\nb' # just print a\nb puts "a\nb" # print a, then b at newline
要回答你的问题,你必须使用""
当你想要做string插值:
a = 2 puts "#{a}"
否则使用简单的引号。
另外,如果您想知道性能方面是否存在差异,那么在StackOverflow上有一个很好的问题。
如果你对RoR真的很陌生,我build议你拿起一本体面的Ruby书来学习这门语言的基础知识。 它会帮助你理解你在做什么(并且不会让你觉得Rails是神奇的)。 我个人build议的基础Rubyist 。
Ruby中的单引号和双引号之间有一个区别,就是要对string进行评估。
最初,我想澄清一下,在string的字面forms中 , 单引号或双引号之间的任何内容都会被视为一个string对象,这是一个Ruby String类的实例。
因此, 'stackoverflow'
和"stackoverflow"
都将评估String类的实例, 完全没有区别 。
区别
两个字面forms的string(单引号或双引号)之间的本质区别是双引号允许转义序列,而单引号不能!
由单引号创build的string文字不支持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 Lintersbuild议在你的string中使用单引号字面值,而在插值/转义序列的情况下则使用双引号字面值 。
与打印中的回答“\ n”类似,以下是另一个差异情况
puts "\1" -> get special character puts '\1' -> get \1
所以看起来像*被转换为双引号中的转义字符,而不是在单引号中。 顺便说一句,它会影响正则expression式中的输出,例如str.gsub(/正则expression式/,'\ 1,\ 2')
单引号的string不会处理ASCII转义码,并且它们不会进行string插值,而双引号则不会。
逃逸代码示例:
2.4.0 :004 > puts 'Hello\nWorld' Hello\nWorld 2.4.0 :005 > puts "Hello\nWorld" Hello World
插值示例:
2.4.0 :008 > age=27 => 27 2.4.0 :009 > puts "Age: #{age}" Age: 27
在这个特定的情况下,你怎么写它没有什么区别。 它们是相同的。 另外,你可能想阅读更多的Ruby指南/教程:)