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



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



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



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

528   7  

7 ответов:

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

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}"

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

кроме того, если вам интересно, есть ли разница в плане производительности, есть отличный вопрос об этом на StackOverflow.

хорошо обоснованный рубист.

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

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

таким образом, 'stackoverflow' и "stackoverflow" оба будут оценивать экземпляры String class без разницы.

разница

существенная разница между двумя литеральными формами строк (одинарные или двойные кавычки) это двойные кавычки позволяют escape-последовательности, а одинарные кавычки нет!

строковый литерал, созданный одинарными кавычками, не поддерживает интерполяция строк и не escape-последовательности.

A аккуратный пример:

"\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..

лучшие практики

как и большинство рубиновых линтеров предлагают используйте литералы с одной кавычкой для ваших строк и перейти на двойные в случае интерполяции / экранирования последовательностей.

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

побег код примера:

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 ""  -> get special character
puts ''  -> get 

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

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

Comments

    Ничего не найдено.