Можно ли выделить ключ и значение хэша при использовании инъекции?

При вызове each в хеше в рубине вы можете получить ключ и значение, красиво разделенные следующим образом:

{ :a => 1, :b => 2, :c => 3 }.each do |key, value| 
  puts "key is #{key} and value is #{value}"
end

=========================

key is :a and value is 1
key is :b and value is 2
key is :c and value is 3
=> {:a=>1, :b=>2, :c=>3}

Однако это не работает при использовании inject.

{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, key, value| 
  puts "key is #{key} and value is #{value}"
  result + value
end

=========================

key is [:a, 1] and value is
TypeError: nil can't be coerced into Fixnum

В упрощенном примере выше мне действительно не нужны ключи, поэтому я мог бы просто позвонить hash.values.inject, но при условии, что мне нужно обоим, есть ли более чистый способ сделать это, чем этот ужасный ложе?

{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, key_and_value| 
  puts "key is #{key_and_value[0]} and value is #{key_and_value[1]}"
  result + key_and_value[1]
end

Ответ 1

Похоже, вам нужно:

{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, (key, value)| 
    puts "key is #{key} and value is #{value}"
    result + value
end