gpt4 book ai didi

ruby - 类型错误 : can't convert String into Integer

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:30 25 4
gpt4 key购买 nike

我有代码:

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?

还有一个关于“注入(inject)”方法的问题。当 Ruby 初始化 'new_hash' 变量时,Ruby 如何知道这个变量的类型?

最佳答案

尝试:

groups = scenes.inject({}) do |new_hash, scene|   new_hash[scene.number] = [] if new_hash[scene.number].nil?   new_hash[scene.number] << scene   new_hashend

Ruby 获取传入 inject() 的空散列并将 new_hash 设置为其。当 block 结束时,返回值用于在下一次通过时初始化 new_hash,即 new_hash 不断累积 block 的结果。

在您的原始代码中,您返回的不是散列而是一个数组(new_hash[scene.number] 是一个数组),下一个通过 Ruby 的循环会报错,因为 new_hash[scene.number] 试图查找数组有一个字符串值,因此你得到了错误。

关于ruby - 类型错误 : can't convert String into Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com