无法将String转换为整数(TypeError)

时间:2012-05-11 14:09:00

标签: ruby

以下代码返回错误“无法将字符串转换为整数”,请帮助

subject = ['eng','Math','Sci']
grade = ['grade 1','grade 2','grade 3']
subject.each do |sub|
    puts ("some string")
    grade[sub] .each do |grd|
        puts ("some string")
    end
end

4 个答案:

答案 0 :(得分:3)

grade[sub] .each do |grd|就是问题所在。

使用索引integer or a range of integers.

访问数组元素

您正尝试使用sub中存储的变量来访问数组元素。由于这是一个普通的.each循环,它将遍历数组中的所有元素,在本例中为'eng','Math','Sci'。如果您想要例如'eng'的位置,则可以使用.each_with_index

它应该只是

grade.each do |grd|

each_with_index

subject.each_with_index do |sub, index|
  print sub
  print grade[index]
end

如果你想要一个主题 - >使用Hash之类的Dave Newton说,使用等级集合可能会很好。

{"eng" => "grade 1","Math" => "grade 2","Sci" => "grade 3"}.each do |subject, grade|
  puts "#{subject| #{grade}"
end

答案 1 :(得分:1)

当你这样做时

  grade[sub] .each do |grd|

Ruby希望sub使用整数来引用成绩列表中的位置。

答案 2 :(得分:0)

subjectgrade都是数组。他们只能通过他们的位置访问。在each循环中,块获取实际元素(在sub中),而不是位置。因此,在第5行中,您尝试访问grade['eng'],这将无效并产生错误。请注意,与例如PHP,数组和散列(关联数组)是不同的东西。

从您的代码中猜测,您可能希望使用each_index代替each,这会将索引号传递给块而不是元素。

答案 3 :(得分:0)

我不确定我理解你想要实现的目标;但是,如果您想要打印主题和成绩,并且您确定数组中元素的相对顺序,您可以这样做:

subject = ['eng','Math','Sci']
grade = ['grade 1','grade 2','grade 3']
subject.each_with_index do |sub, idx|
    puts "#{sub} - #{grade[idx]}"
end

输出:

eng - grade 1
math - grade 2
sci - grade 3

然而,哈希可能更适合您的需求。