【问题标题】:Difference between hash["key"] = "value" and hash.store("key","value")hash["key"] = "value" 和 hash.store("key","value") 的区别
【发布时间】:2015-10-12 19:57:33
【问题描述】:

在Ruby中,有什么区别

hash["key"] = "value"

hash.store("key","value")

【问题讨论】:

  • 在文档中它们被列为同一事物。

标签: ruby hashmap hash


【解决方案1】:

两者没有区别。

如果你在 irb(交互式 ruby​​)中运行两者,你会得到相同的结果。

假设您有一个名为列表的散列,具有以下键/值对:

list = { "item" => "Milk", "quantity" => 2 }

当您添加键时,“价格”的值是 10,使用

list.store("price", 10)

列表,现在将返回,

# => {"item"=>"Milk", "quantity"=>2, "price"=>10}

同样,删除键,“价格”

list.delete("price")

然后再次添加密钥,使用

list["price"] = 10

列表,也会返回,

# => {"item"=>"Milk", "quantity"=>2, "price"=>10}

【讨论】:

  • “它们只是做同一件事的两种不同方式。” – 它们不仅如此:它们是别名,IOW,它们不是两种不同方式,它们是相同方式,只是在一个不同的名字。
【解决方案2】:

为了理解它,我们可以检查 ruby​​ 源代码。 hash类的源代码可以在here找到。

方法[]=4017行定义为:

rb_define_method(rb_cHash,"[]=", rb_hash_aset, 2);

方法store4018行定义为:

rb_define_method(rb_cHash,"store", rb_hash_aset, 2);

如您所见,它们都指向 C 函数 rb_hash_aset,这意味着方法 store 只是 []= 方法的别名。

【讨论】:

  • 您可以比较 Ruby 中的方法:Hash.instance_method(:store) == Hash.instance_method(:[]=) #=> true
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 2019-12-20
  • 2013-06-24
  • 2012-01-25
  • 2013-08-31
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
相关资源
最近更新 更多