我有代碼:類型錯誤:不能轉換成字符串整數
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如何知道這個變量的類型?
btw:你可以通過使用'groups = scenes.group_by(&:number)'而不是注入來更輕鬆地做到你想要的。 – sepp2k 2010-03-21 11:54:15
的new_hash變量與注入的值進行初始化(記住:這是一個摺疊操作在該蓄壓有一個初始值) – hurikhan77 2010-03-21 12:27:30