首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么哈希中的这个字符串键被转换为符号?

为什么哈希中的这个字符串键被转换为符号?
EN

Stack Overflow用户
提问于 2016-04-09 15:27:29
回答 3查看 23.9K关注 0票数 41

使用Ruby 2.3:

在示例1中,字符串键"a"自动转换为符号,而在示例2中,它保持为字符串。

示例1

代码语言:javascript
运行
复制
{"a": 1}
# => {:a=>1} 

示例2

代码语言:javascript
运行
复制
{"a"=>"c"}
# => {"a"=>"c"}

我认为:和旧式的散列火箭=>语法是一样的。怎么一回事?为什么我在Rails中从来没有注意到这一点?是HashWithIndifferentAccess掩盖了这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2016-04-09 16:17:22

在Ruby2.3(.0)中,这些都是一样的:

代码语言:javascript
运行
复制
{:"a" => 1}
{"a": 1},
{:a => 1}
{a: 1} 

它们都转化为同一件事:在所有这些情况下,a都是一个符号。

{"a"=>1}则不同:在本例中,a是一个字符串。

票数 48
EN

Stack Overflow用户

发布于 2016-04-09 15:33:05

这是因为ruby 1.9引入了新的散列语法。带有冒号的语法仅适用于符号键。它被称为“符号到对象”散列,它只是最常见的散列样式的语法糖。对我来说,另一点是它更接近javascript对象表示法。

如果我有混合的键类型,那么我更喜欢旧的风格(散列-火箭语法),但这取决于你。把这两种风格混合在一起在我看来很难看。

票数 10
EN

Stack Overflow用户

发布于 2018-01-08 18:15:42

根据Ruby documentation的说法

Ruby块引号符号对象表示

解释器中的名称和一些字符串。它们是使用:name和:"string“文本语法以及各种to_sym方法生成的。..。

这意味着运行:

代码语言:javascript
运行
复制
$ 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"

将产生相同的结果:

代码语言:javascript
运行
复制
$ {:key=>"value"}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36513996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档