Двойные и одинарные кавычки - PullRequest
151 голосов
/ 18 июня 2011

Я действительно новичок в Ruby и пытаюсь понять, есть ли конкретное время, когда я должен использовать "" против ''.

Большую часть времени я использую одинарные кавычки, потому что их легче набирать, но я не уверен, что должен.

например. get 'user/new' против get "user/new"

Ответы [ 7 ]

187 голосов
/ 18 июня 2011

" " позволяет вам выполнять интерполяцию строк, например ::

world_type = 'Mars'
"Hello #{world_type}"
126 голосов
/ 17 мая 2013

кроме интерполяции, другое отличие состоит в том, что 'escape-последовательность' не работает в одинарных кавычках

puts 'a\nb' # just print a\nb 
puts "a\nb" # print a, then b at newline 
38 голосов
/ 18 июня 2011

Чтобы ответить на ваш вопрос, вы должны использовать "", если хотите выполнить интерполяцию строк:

a = 2
puts "#{a}"

В противном случае используйте простые кавычки.

Также, если вам интересно,есть разница с точки зрения производительности, есть отличный вопрос по этому поводу в StackOverflow.

И если вы действительно новичок в RoR, я призываю вас взять приличную книгу по Rubyизучить основы языка.Это поможет вам понять, что вы делаете (и удержит вас от мысли, что Rails - это магия).Я лично рекомендую Хорошо обоснованный Рубист .

29 голосов
/ 22 февраля 2016

Существует разница между одинарными '' и двойными кавычками "" в Ruby с точки зрения того, что должно быть оценено как строка.

Первоначально я хотел бы уточнить, что в буквенная форма строки , что находится между одинарными или двойными кавычками, оценивается как строковый объект, который является экземпляром класса Ruby String.

Следовательно, 'stackoverflow' и "stackoverflow" оба будут оценивать экземпляры класса String без различий .

Разница

Существенное различие между двумя буквальными формами строк (одинарные или двойные кавычки) заключается в том, что двойные кавычки допускают escape-последовательности, а одинарные кавычки - нет!

Строковый литерал, созданный одинарными кавычками, не поддерживает строковую интерполяцию , а не экранирует последовательности.

Хороший пример:

"\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 предлагают использовать литералы одинарных кавычек для строк и использовать двойные в случае интерполяции / экранирования последовательностей.

6 голосов
/ 12 октября 2017

Строки в одинарных кавычках не обрабатывают управляющие коды 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
3 голосов
/ 30 октября 2013

Подобно ответу "\ n" при печати, ниже приведен еще один случай различия

puts "\1"  -> get special character
puts '\1'  -> get \1

, поэтому * выглядит так: * был преобразован в экранированный символ в двойных кавычках, но не в одинарных кавычках.Кстати, это повлияет на вывод при использовании в регулярном выражении, например, str.gsub (/ регулярное выражение /, '\ 1, \ 2')

0 голосов
/ 18 июня 2011

В этом конкретном случае не имеет значения, как вы пишете. Они эквивалентны. Кроме того, вы можете прочитать еще несколько руководств / руководств по Ruby:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...