Это классический пример значения против представления значения.
Позвольте мне привести несколько примеров:
'"'
#=> "\""
'
'
#=> "\n"
'a-b'.to_sym
#=> :"a-b"
Все вышеперечисленные блоки имеют одинаковое общее.Вывод не является литералом, но должен интерпретироваться в контексте.
"\""
- это не строка, содержащая обратную косую черту и двойные кавычки, а строка, содержащая одинарные двойные кавычки (\"
представляет двойные кавычки в контексте двойных кавычек). "\n"
- это не строка, содержащая обратную косую черту и «n», а строка, содержащая один символ новой строки (\n
представляет новую строку в контексте строки в двойных кавычках). :"a-b"
- это не символ, содержащий "a-b"
, а символ, содержащий a-b
(:"..."
представляет символ, который не может быть проанализирован без кавычек).
Это видно, когда мы распечатываем значения.
puts "\""
# "
#=> nil
puts "\n"
#
# => nil
puts :"a-b"
# a-b
#=> nil
Как видно из приведенного выше блока кода,кавычки на самом деле не являются частью символа.Они предназначены только для представления символов.
Если символ действительно содержит кавычки, представление будет выглядеть так:
a = '"a-b"'.to_sym
#=> :"\"a-b\""
puts a
# "a-b"
#=> nil