2014-10-30 24 views
2

我想多[原文]参数散列和收到此错误:红宝石试图推动与(**参数)哈希

`method': wrong number of arguments (3 for 0) (ArgumentError)

有人能告诉我,我怎么能做到这一点/我做错了什么?

class MyClass 
    attr_accessor :variable 
    def initialize 
    @variable = {} 
    end 
    def method(**parameter) 
    parameter.each {|k,v| @variable[k] = v} 
    end 
end 

new_class = MyClass.new 
p new_class.method(["key", 1],["house", 2],["key", 3]) 
+0

如果您使用的是最新版本的ruby,请尝试'new_class.method(key:1,house:2)'。 – ymonad 2014-10-30 03:57:24

+1

所有你需要做的就是删除一个'*'。 – 2014-10-30 04:27:17

+0

或者,移除'**'并用一个参数调用:'new_class.method([[“key”,1],[“house”,2],[“key”,3]])''。 – 2014-10-30 04:35:11

回答

4

你可能要考虑更地道使用Ruby

class MyClass 
    def initialize 
    @variable = {} 
    end 

    def method hash 
    @variable.merge! hash 
    end 
end 

然后使用它像这样

foo = MyClass.new 
foo.method a: 1, b: 2 

最后一行加上了糖衣机红宝石

foo.method({:a => 1, :b => 2}) 

Hash#merge! docs

+0

您可能希望解释最后一行代码,因为Rob对于Ruby来说相当新颖。 – 2014-10-30 04:39:14

+0

@CarySwoveland,谢谢,我加了一点点说明。 – naomik 2014-10-30 04:42:54