我在codequizzes.com上看到了这个:
转换此
people = [["bob", 320], ["edgar", 152], ["maria", 125]]
到
{"bob" => 320, "edgar" => 152, "maria" => 125}
答案:
Hash[people]
或
people.inject({}) do |memo, (name, number)| memo[name] = number memo end
以上都奏效了。但是,我在下面的单行答案没有:
people.inject({}) {|memo, (name, number)| memo[name] = number }
我收到了这个错误:
NoMethodError: undefined method `[]=' for 320:Fixnum
我的单行班车出了什么问题?
答案 0 :(得分:5)
您忘了返回memo
:
people.inject({}) {|memo, (name, number)| memo[name] = number; memo }
分配后, Hash#[]=
会返回值。在您的块中,您使用方法#[]=
和值>将值添加到键正在返回em>并将其分配给memo
。您的memo
是Fixnum
个实例,并且在 next 迭代中,#[]=
已被调用,如320#[]=
。但是Fixnum#[]=
不存在,所以你得到了预期的错误。
但是使用#each_with_object
,您无需返回memo
:
people.each_with_object({}) {|(name, number), memo| memo[name] = number }
以上将有效。