如何创建不带引号的键哈希

时间:2019-01-29 13:37:44

标签: ruby literals

我正在尝试像这样为我的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 :(得分:2)

这是价值与价值表示的经典示例。

让我为您提供一些示例:

'"'
#=> "\""

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