tengo código:TypeError: no se puede convertir la serie en Entero
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
Cuando estoy lauching que me sale error:
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>'
Si cambio de escenas a:
scenes = [Scene.new(1), Scene.new(1), Scene.new(2), Scene.new(1)]
el problema desapareció.
¿Por qué aparece el mensaje de error en el primer caso? ¿Por qué Ruby decide convertir scene.number de String a Integer?
Y una pregunta adicional sobre el método 'inyectar'. Cuando Ruby inicializa la variable 'new_hash' y ¿cómo puede saber Ruby el tipo de esta variable?
Btw: puedes hacer lo que quieras más fácilmente usando 'groups = scenes.group_by (&: number)' en lugar de inject. – sepp2k
La variable new_hash se inicializa con el valor inyectado (tenga en cuenta: es una operación de plegado que tiene un valor de inicio en el acumulador) – hurikhan77