Двойные и одинарные кавычки
Я действительно новичок в 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:)