使用Ruby 2.3:
在示例1中,字符串键"a"自动转换为符号,而在示例2中,它保持为字符串。
示例1
{"a": 1}
# => {:a=>1} 示例2
{"a"=>"c"}
# => {"a"=>"c"}我认为:和旧式的散列火箭=>语法是一样的。怎么一回事?为什么我在Rails中从来没有注意到这一点?是HashWithIndifferentAccess掩盖了这一点吗?
发布于 2016-04-09 16:17:22
在Ruby2.3(.0)中,这些都是一样的:
{:"a" => 1}
{"a": 1},
{:a => 1}
{a: 1} 它们都转化为同一件事:在所有这些情况下,a都是一个符号。
{"a"=>1}则不同:在本例中,a是一个字符串。
发布于 2016-04-09 15:33:05
这是因为ruby 1.9引入了新的散列语法。带有冒号的语法仅适用于符号键。它被称为“符号到对象”散列,它只是最常见的散列样式的语法糖。对我来说,另一点是它更接近javascript对象表示法。
如果我有混合的键类型,那么我更喜欢旧的风格(散列-火箭语法),但这取决于你。把这两种风格混合在一起在我看来很难看。
发布于 2018-01-08 18:15:42
根据Ruby documentation的说法
Ruby块引号符号对象表示
解释器中的名称和一些字符串。它们是使用:name和:"string“文本语法以及各种to_sym方法生成的。..。
这意味着运行:
$ ruby -e ruby -e "h = {key: \"value\"}; puts h"
$ ruby -e ruby -e "h = {:key => \"value\"}; puts h"
$ ruby -e ruby -e "h = {\"key\": \"value\"}; puts h"
$ ruby -e ruby -e "h = {:\"key\" => \"value\"}; puts h"
$ ruby -e ruby -e "h = {\"#{:key}\": \"value\"}; puts h"将产生相同的结果:
$ {:key=>"value"}https://stackoverflow.com/questions/36513996
复制相似问题