我正在通过RubyMonk学习Ruby。在服务员机器人问题的解决方案中,有一行代码使用数组创建了一个新哈希表:
我理解这里正在做什么以及展开运算符的工作方式。但是,我对创建这个哈希的语法感到困惑。RubyDoc 表示,实际上调用了方法
o = Hash[*order]
给定
order = [:table, 1, :sandwich, "denver", :drink, "mango shake"]
我理解这里正在做什么以及展开运算符的工作方式。但是,我对创建这个哈希的语法感到困惑。RubyDoc 表示,实际上调用了方法
::[]
,所以我能够确定o = Hash::[](*order)
与Hash[*order]
是同一件事情。但为什么可以将其缩短为Hash[*order]
? 这是解析器解释的特殊构造吗?还是有其他原因?在同样的线路上,为什么以下任何一个都不起作用呢?o = Hash.new
o.[](*order)
或者
o = Hash.new
o[*order]
甚至像这样 o = {}[*order]
我知道这些代码 不应该 起作用;但我不确定为什么。我认为我对使用未先实例化哈希的 Hash[*order]
的用法感到困惑。这是类方法和实例方法之间差异的示例吗?
(顺便说一句,我觉得 o = {*order}
应该可以工作,但它并不起作用。)
有人能解释一下这里发生了什么,以及是否有其他方法将数组中的值添加到哈希中吗?
Hash(*order)
呢?我对如何在这里使用方括号感到困惑。 - user428517Kernel#Hash
,该方法在我更新的答案的最后一行有链接。 - Darshan Rivka WhittleHash[]
是一个方便的类方法,类似于调用object[]
和Hash[]
是不同的方法。查看Hash类文档,找到这两个不同的[]
方法。此外,在语言中,[]
是一种特殊的解析情况,它基本上执行的是object.[](args)
。 - Azolo[]
对解释器有特殊意义让我明白了。 - user428517