我正在尝试从本地环境中定义的哈希中返回基于用户定义参数的值列表。
def my_method *args
#initialize accumulator
accumulator = Hash.new(0)
#define hashes in local environment
foo=Hash["key1"=>["var1","var2"],"key2"=>["var3","var4","var5"]]
bar=Hash["key3"=>["var6"],"key4"=>["var7","var8","var9"],"key5"=>["var10","var11","var12"]]
baz=Hash["key6"=>["var13","var14","var15","var16"]]
#iterate over args and build accumulator
args.each do |x|
if foo.has_key?(x)
accumulator=foo.assoc(x)
elsif bar.has_key?(x)
accumulator=bar.assoc(x)
elsif baz.has_key?(x)
accumulator=baz.assoc(x)
else
puts "invalid input"
end
end
#convert accumulator to list, and return value
return accumulator = accumulator.to_a {|k,v| [k].product(v).flatten}
end
用户将使用作为关键字的参数调用该方法,并且该函数将返回与接收到的每个关键字相关联的值列表。
例如
> my_method(key5,key6,key1)
=> ["var10","var11","var12","var13","var14","var15","var16","var1","var2"]
输出可以是任何顺序。当我尝试运行代码时收到以下错误:
undefined method `assoc' for #<Hash:0x10f591518> (NoMethodError)
请你指点我如何解决这个问题?在终端assoc
中完全按照我的预期执行:
> foo.assoc("key1")
=> ["var1","var2"]