У меня есть код:
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
Когда я запускаю его, я получаю сообщение об ошибке:
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>'
Если я изменю сцены на:
scenes = [Scene.new(1), Scene.new(1), Scene.new(2), Scene.new(1)]
проблема исчезнет.
Почему я получаю сообщение об ошибке в первом случае? Почему Ruby решил преобразовать scene.number из String в Integer?
И еще один вопрос о методе «инъекции». Когда Ruby инициализирует переменную 'new_hash' и как Ruby может узнать тип этой переменной?