删除哈希时为什么用()代替[]?

时间:2012-03-12 22:06:53

标签: ruby

完整的编程初学者只是想澄清一些事情,我正在为哈希创建密钥并决定我想删除一个。以下是我的猜测:

hash["key"].­delete
hash.dele­te["key"]

我最终查了一下,我想使用( )

hash.dele­te("key")

由于我使用[ ]来创建哈希,为什么我不用它来删除密钥?另外,为什么hash("key").delete不起作用?

2 个答案:

答案 0 :(得分:10)

[] is actually a method of Hash,并在语言中专门处理,因此参数介于[]之间。它等同于store,它使用标准方法语法。

同样,delete is also a method,它接受​​一个参数。执行hash.delete['foo']正在尝试调用delete(没有参数),然后在它返回的任何内容上调用[]。执行hash['foo'].delete时,delete上存储的内容正在调用hash['foo']

答案 1 :(得分:2)

hash.delete()是一种方法,其中hash []是一种糖语法(但仍然是一种方法)。如果您更喜欢一致性,可以使用hash.store(key,value)。

hash[:key] = :value
hash.store(:key, :value)
hash.delete(:key)