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