Ответ 1
" "
позволяет выполнить строчную интерполяцию, например:
world_type = 'Mars'
"Hello #{world_type}"
Я действительно новичок в Ruby, и я пытаюсь понять, есть ли определенное время, когда я должен использовать ""
vs ''
.
Я использую одинарные кавычки большую часть времени, потому что это легче ввести, но я не уверен, должен ли я это делать.
например. get 'user/new'
vs get "user/new"
" "
позволяет выполнить строчную интерполяцию, например:
world_type = 'Mars'
"Hello #{world_type}"
за исключением интерполяции, другое отличие состоит в том, что "escape-последовательность" не работает в одинарной кавычке
puts 'a\nb' # just print a\nb
puts "a\nb" # print a, then b at newline
Чтобы ответить на ваш вопрос, вы должны использовать ""
, если хотите выполнить интерполяцию строк:
a = 2
puts "#{a}"
Используйте простую цитату в противном случае.
Также, если вам интересно, есть ли разница в производительности, есть отличный fooobar.com/questions/50667/...
И если вы действительно новичок в RoR, я призываю вас подобрать достойную книгу Ruby, чтобы изучить основы языка. Это поможет вам понять, что вы делаете (и не позволит вам думать, что Rails - это волшебство). Я лично рекомендую The Well grounded Rubyist.
Существует различие между одиночными ''
и двойными кавычками ""
в 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 предлагают использовать литералы одиночной кавычки для ваших строк и идут для двойных в случае последовательностей интерполяции/экранирования.
Как и в ответе "\n" при печати, следующий пример разницы
puts "\1" -> get special character
puts '\1' -> get \1
поэтому выглядит так: * был преобразован в экранированный символ в двойные кавычки, но не в одинарных кавычках. BTW, это повлияет на результат при использовании в регулярном выражении например., str.gsub(/регулярное выражение /, '\ 1,\2')
Строки с одним кавычком не обрабатывают 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
В этом конкретном случае не имеет значения, как вы его пишете. Они эквивалентны. Кроме того, вы можете прочитать еще несколько руководств/руководств Ruby:)