【问题标题】:How to set a hash key using a variable in Ruby 1.9?如何在 Ruby 1.9 中使用变量设置哈希键?
【发布时间】:2015-08-31 10:59:29
【问题描述】:

我有一个字符串变量。我想使用变量作为键创建一个哈希。在 Ruby 1.8 中,我使用了 hashrocket 语法,如下所示:

my_key = 'arbitrary'
my_hash = {my_key => 'my_value'}

在 Ruby 1.9 中,有一种新语法,我可以这样做:

my_hash = {arbitrary: 'my_value'}

但是如何将变量转换为键?我试过了:

my_key = 'arbitrary'
my_hash = {:my_key 'my_value'} 
my_hash = {my_key.to_sym: 'my_value'}
my_hash = {:my_key.to_sym 'my_value'} 
my_hash = {my_key.to_sym 'my_value'}

我必须继续使用 Ruby 1.8 语法吗?

【问题讨论】:

  • 您不需要对现有代码应用任何修改。哈希火箭仍然有效。
  • AFAIK 你也可以选择my_hash[my_key] = 'my_value'

标签: ruby


【解决方案1】:

让我向您介绍两种实现您真正想要的方式的方法。如果您不想再继续使用 1.8 语法和 hashrockets,ruby-doc.org 建议在 Ruby 1.9.3 中这样做:

my_hash = Hash.new

my_key = "key000"
my_hash[my_key] = "my_value"

现场演示:http://ideone.com/yqIx2M

第二个(更类似于您想要实现的目标)是:

my_key = "key0"
my_hash = Hash[my_key, "value00"]

puts my_hash

现场演示:http://ideone.com/HHLyAi

【讨论】:

    【解决方案2】:

    {arbitrary: 'my_value'}{:arbitrary => 'my_value'} 的语法糖,:arbitrary'arbitrary'.to_sym 的语法糖(是的,这是一个谎言,因为 :arbitrary 是解释器读取代码时的实习生,'arbitrary'.to_sym 实习生是它执行代码,但为了便于解释,我们假设它们是等价的)

    所以,{arbitrary: 'my_value'} 可以写成{'arbitrary'.to_sym => 'my_value'},因为你有一个变量的键,你可以使用:

    my_key = 'arbitrary'
    my_hash = {my_key.to_sym => 'my_value'}
    

    请记住,当您使用to_sym 时,您可能会冒着创建大量符号的风险,这些符号将永远留在内存中(ish),因此您可能需要考虑在旧语法中使用字符串键。有关字符串和符号之间区别的更多信息,请阅读:http://www.randomhacks.net/2007/01/20/13-ways-of-looking-at-a-ruby-symbol/

    【讨论】:

    • Ruby 确实从 2.2 开始收集符号。
    【解决方案3】:

    Ruby 1.9 语法仅适用于 Symbol 文字。对于其他任何东西,即键不是Symbol,或者不是文字(如您的示例),您仍然需要使用 hashrocket。

    【讨论】:

      猜你喜欢
      • 2011-01-09
      • 2014-10-21
      • 2010-12-01
      • 2012-02-06
      • 2011-10-25
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多