Двойные против одиночных кавычек

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

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

например. get 'user/new' vs get "user/new"

Ответ 1

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

world_type = 'Mars'
"Hello #{world_type}"

Ответ 2

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

puts 'a\nb' # just print a\nb 
puts "a\nb" # print a, then b at newline 

Ответ 3

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

a = 2
puts "#{a}"

Используйте простую цитату в противном случае.

Также, если вам интересно, есть ли разница в производительности, есть отличный fooobar.com/questions/50667/...

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

Ответ 4

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

Вначале я хотел бы пояснить, что в буквальная форма строки все, что находится между одиночными или двойными кавычками, оценивается как string, который является экземпляром класса 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 предлагают использовать литералы одиночной кавычки для ваших строк и идут для двойных в случае последовательностей интерполяции/экранирования.

Ответ 5

Как и в ответе "\n" при печати, следующий пример разницы

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

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

Ответ 6

Строки с одним кавычком не обрабатывают escape-коды ASCII, и они не выполняйте строчную интерполяцию, а двойные кавычки делают оба.

Пример кода Escape:

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

Ответ 7

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