4

(--工作人员删除了问题--)

4

2 回答 2

3

这是类方法和实例方法之间区别的一个例子吗?

确切地。

但是为什么可以将其缩短为 just Hash[*order]

Ruby 解释some_object[]为对名为[]on的方法的调用some_object。这对于哈希来说并不特殊,您可以[]在自己的任何类中实现方法并使用该语法。

有人可以解释这里发生了什么,以及是否有其他方法可以将数组中的值添加到哈希中?

Hash[*order]调用Hash#[]创建新哈希的类方法 ( )。 o.[](*order)由于您无法调用new它的相同原因不起作用:{}.new没有任何意义。您不能在类的实例上调用类方法。

您可以添加值merge

o = Hash.new
o.merge(Hash[*order])

o = {*order}不起作用,因为{}它是 Hash 文字的语法,并且放在*order那里没有意义。

Hash(*order)Kernel#Hash,一种只需要一个参数的方法。

于 2013-04-23T20:28:13.087 回答
1

当您编写时,Hash(*order)您实际上是在调用模块中的Hash方法Kernel,这与调用类[]中的方法不同Hash。请参阅文档Kernel#Hash了解那里发生了什么。

于 2013-04-23T20:26:22.650 回答