我正在尝试对字符串的每个字符执行一个操作,后面跟着另一个字符,即不是最后一个字符的字符。我的代码是:
[0..(str.length - 2)].each do |index|
// do something with index
end
代码出错了。 [0..(str.length - 2)]
返回一个范围对象,而不是可以迭代的实际范围。将return index
放在上面的主体中会导致单次迭代,输出类似[0..7]
。为什么不迭代每个数字?
答案 0 :(得分:6)
通过将范围括在[..]中,您创建了一个包含单个Range对象的Array。换句话说,数组的长度是1。你只想要:
(0..(str.length - 2)).each do |index|
// do something with index
end
答案 1 :(得分:3)
你得到的是一个包含Range
而不是单个范围的数组,因此每个数组都会产生一个范围而不是该范围内的整数。将[]替换为(),你应该没问题。
答案 2 :(得分:2)
应该是:
(0..(str.length - 2)).each do |index|
// do something with index
end