Quando si chiama each
su un hash in Ruby, è possibile ottenere la chiave e il valore ben separati in questo modo:È possibile separare la chiave e il valore di un hash quando si utilizza iniettare?
{ :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}
Tuttavia questo non sembra funzionare quando si utilizza 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
Nell'esempio semplificato di cui sopra non ho davvero bisogno le chiavi quindi ho potuto solo chiamare hash.values.inject
, ma assumendo ho bisogno di entrambi, c'è un modo più pulito per fare questo che questa orribile bodge?
{ :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
Grazie! Nuovo per Ruby e questo mi ha irritato perché la sua bruttezza è in netto contrasto con il resto della lingua. Sapevo che ci sarebbe stata una soluzione semplice e pulita come questa. – Russell
+1 perché questa era una buona risposta, e mi avrebbe irritato essere bloccato a 299 reputazione ... – Russell