下面的代码返回错误“不能把字符串转换到整数”,请大家帮忙不能把字符串转换到整数(类型错误)
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
下面的代码返回错误“不能把字符串转换到整数”,请大家帮忙不能把字符串转换到整数(类型错误)
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
当你
grade[sub] .each do |grd|
红宝石预计sub
使用整数来引用等级的列表中的位置是。
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
如果你想有一个主题 - >级收集它可能是好的,像Dave Newton说的那样使用Hash。
{"eng" => "grade 1","Math" => "grade 2","Sci" => "grade 3"}.each do |subject, grade|
puts "#{subject| #{grade}"
end
subject
和grade
都是数组。他们只能通过他们的位置进入。在您的each
循环中,块获取实际元素(在sub
中),而不是位置。因此,在第5行中,您试图访问grade['eng']
,这将不起作用并产生错误。请注意,与例如PHP,一个数组和一个散列(一个关联数组)是不同的东西。
从您的代码猜测,您可能想要使用each_index
而不是each
这将传递索引号到块而不是元素。
我不知道我明白你想达到什么目的;但是,如果你想打印科目和年级,你肯定对元素的数组中的相对顺序,你可以这样做:
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
的哈希但是可能更适合您的需求。
你正在尝试用一个字符串索引一个数组。你想要一个散列而不是两个数组? –
您是否可以向您的问题添加您期望看到的示例输出? –