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

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

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

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

7 ответов

Решение

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

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

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

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

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

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

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

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

a = 2
puts "#{a}"

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

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

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

Строки с одинарными кавычками не обрабатывают управляющие коды ASCII ( \n, \t и т. Д.) И не выполняют интерполяцию строк, тогда как двойные кавычки выполняют обе функции.

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

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')

Another reason you would want to use single-quotes is when passing a regex pattern as a string:

This regex pattern will work because passed within single-quotes:

"123 ABC".match('\d')
=> #<MatchData "1">

This regex pattern will fail because passed within double-quotes (you would have to double-escape it to get it to work):

"123 ABC".match("\d")
=> nil

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

Другие вопросы по тегам