我正在尝试像这样为我的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\""
答案 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