为什么不迭代字符串的每个索引不能正常工作?

时间:2011-12-24 01:37:18

标签: ruby iteration

我正在尝试对字符串的每个字符执行一个操作,后面跟着另一个字符,即不是最后一个字符的字符。我的代码是:

[0..(str.length - 2)].each do |index|
    // do something with index
end

代码出错了。 [0..(str.length - 2)]返回一个范围对象,而不是可以迭代的实际范围。将return index放在上面的主体中会导致单次迭代,输出类似[0..7]。为什么不迭代每个数字?

3 个答案:

答案 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