Ruby:使用键/值数组设置新哈希
我正在通过
RubyMonk学习
Ruby.在
waiter robot problem的解决方案中,有一行代码使用数组创建新哈希:
o = Hash[*order] 特定 order = [:table,1,:sandwich,"denver",:drink,"mango shake"] 我理解这里正在做什么以及splat运算符是如何工作的.但是,我对创建此哈希的语法感到困惑. RubyDoc说:: []实际上是被调用的方法,所以我能够确定o = Hash :: [](* order)是一回事.但为什么这可以简化为Hash [* order]?这是一个由解析器解释的特殊构造,还是有另一个原因?同样,为什么以下任何一项工作都没有? o = Hash.new o.[](*order) 要么 o = Hash.new o[*order] 甚至像o = {} [* order]之类的东西 我知道这些不应该奏效;我只是不确定为什么.我认为在没有首先使用Hash.new实例化哈希的情况下,我对Hash [* order]的使用感到困惑.这是类方法和实例方法之间区别的一个例子吗? (作为旁注,在我看来,o = {* order}应该有效,但事实并非如此.) 有人可以解释这里发生了什么,以及是否有其他方法可以将数组中的值添加到哈希中? 解决方法
这是类方法和实例方法之间区别的一个例子吗?
究竟. 但为什么这可以简化为Hash [* order]? Ruby将some_object []解释为对some_object上名为[]的方法的调用.这对于Hashes来说并不特殊,您可以在自己的任何类中实现[]方法并使用该语法. 有人可以解释这里发生了什么,以及是否有其他方法可以将数组中的值添加到哈希中? Hash [* order]调用一个创建新Hash的类方法(Hash#[]). o.[](* order)因为你不能在其上调用new的原因不起作用:{}.new没有任何意义.您不能在类的实例上调用类方法. 您可以使用合并添加值: o = Hash.new o.merge(Hash[*order]) o = {* order}不起作用,因为{}是Hash文字的语法,并且将* order放在那里是没有意义的. 哈希(* order)是Kernel#Hash,一种只需要一个参数的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |