yykrlc
V2EX  ›  Ruby

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

  •  
  •   yykrlc · Jun 16, 2020 · 6884 views
    This topic created in 2158 days ago, the information mentioned may be changed or developed.
    ruby 的 x = {"a": 1 "b": 2}
    y = 'b'
    > x[y]
    => nil
    > x[:b]
    => 2
    怎么办,我的变量是字符串
    3 replies    2021-05-17 14:28:57 +08:00
    tmrQAQ
        1
    tmrQAQ  
       Jun 16, 2020   ❤️ 1
    y.to_sym
    echohn
        2
    echohn  
       Aug 8, 2020
    这里玩 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  
       May 17, 2021
    在 rails 里,可以

    x.with_indifferent_access
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1044 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:41 · PVG 02:41 · LAX 11:41 · JFK 14:41
    ♥ Do have faith in what you're doing.