ruby 的 "a" 和 :a 能转换吗

2020-06-16 11:52:34 +08:00
 yykrlc
ruby 的 x = {"a": 1 "b": 2}
y = 'b'
> x[y]
=> nil
> x[:b]
=> 2
怎么办,我的变量是字符串
5227 次点击
所在节点    Ruby
3 条回复
tmrQAQ
2020-06-16 11:56:10 +08:00
y.to_sym
echohn
2020-08-08 01:19:47 +08:00
这里玩 Ruby 的太少了,有问题还是去 ruby-china 问吧。

而你的问题本身描述是有问题的。

在 Ruby 里,Hash 的标准初始化方式是 `=>`, 适用于一切 key 的类型;而 `:` 的语法,是 Ruby 1.9 版本之后,仅适用于 key 是 Symbol 的情况,而且会隐含将 key 转换为 Symbol 的操作。

也就是说,如果你想在使用中,你的 key 是字符串,应该定义为 `x = {'a' => 1, 'b' => 2}`。

而题目中通过`:`的定义方式,key 的类型已经转换为 Symbol,是 :b,所以在 x['b'] 的时候并没有取到值。

回到问题, 能转换的。

```ruby
'a'.to_sym # => :a
:a.to_s # => 'a'
```
doublechenpaul
2021-05-17 14:28:57 +08:00
在 rails 里,可以

x.with_indifferent_access

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX