mam kod:TypeError: nie można przekonwertować ciąg na Integer
class Scene
def initialize(number)
@number = number
end
attr_reader :number
end
scenes = [Scene.new("one"), Scene.new("one"), Scene.new("two"), Scene.new("one")]
groups = scenes.inject({}) do |new_hash, scene|
new_hash[scene.number] = [] if new_hash[scene.number].nil?
new_hash[scene.number] << scene
end
Kiedy jestem lauching go otrzymuję błąd:
freq.rb:11:in `[]': can't convert String into Integer (TypeError)
from freq.rb:11:in `block in <main>'
from freq.rb:10:in `each'
from freq.rb:10:in `inject'
from freq.rb:10:in `<main>'
Jeśli zmienię kulisami:
scenes = [Scene.new(1), Scene.new(1), Scene.new(2), Scene.new(1)]
problem zniknął.
Dlaczego pojawia się komunikat o błędzie w pierwszym przypadku? Dlaczego Ruby decyduje się przekonwertować numer sceny na String na Integer?
I jedno dodatkowe pytanie dotyczące metody "wstrzykiwania". Kiedy Ruby zainicjuje zmienną "new_hash" i jak Ruby może znać typ tej zmiennej?
Btw: możesz robić co chcesz, łatwiej za pomocą 'groups = scenes.group_by (&: Number)' zamiast inject. – sepp2k
Zmienna new_hash jest zainicjowana wartością wtrysku (należy pamiętać, że jest to operacja składania, która ma wartość początkową w akumulatorze). – hurikhan77