Я пытаюсь вернуть список значений на основе пользовательских аргументов из хэшей, определенных в локальной среде.undefined method `assoc 'for # <Hash: 0x10f591518> (NoMethodError)
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"]
Какая версия Ruby? 'Hash # assoc' был добавлен в Ruby 1.9. Он не доступен в Ruby 1.8. –
1.9.3 извините, я пропустил это – aug2uag
Возможно, он находится в другом драгоценном камне, который загружается консолью irb, но не при запуске скрипта. – User