Как создать ключевой хеш без кавычек - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать заголовок для моего API следующим образом:

header = {:Content-Type => "application/json"}

У меня проблема с ключом, который содержит тире.Если я использую :"Content-Type" или "Content-Type".to_sym, в результате получается такой ключ:

"Content-Type".to_sym # => :"Content-Type"

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

"Content-Type".to_sym.inspect # => ":\"Content-Type\""

1 Ответ

0 голосов
/ 29 января 2019

Это классический пример значения против представления значения.

Позвольте мне привести несколько примеров:

'"'
#=> "\""

'
'
#=> "\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
...