V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yykrlc
V2EX  ›  Ruby

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

  •  
  •   yykrlc · 2020-06-16 11:52:34 +08:00 · 5171 次点击
    这是一个创建于 1381 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ruby 的 x = {"a": 1 "b": 2}
    y = 'b'
    > x[y]
    => nil
    > x[:b]
    => 2
    怎么办,我的变量是字符串
    3 条回复    2021-05-17 14:28:57 +08:00
    tmrQAQ
        1
    tmrQAQ  
       2020-06-16 11:56:10 +08:00   ❤️ 1
    y.to_sym
    echohn
        2
    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
        3
    doublechenpaul  
       2021-05-17 14:28:57 +08:00
    在 rails 里,可以

    x.with_indifferent_access
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4486 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:08 · PVG 18:08 · LAX 03:08 · JFK 06:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.