2011-12-24 3 views
1

私は、文字列の各文字に続いて別の文字、すなわち最後の文字でない文字を操作しようとしています。私のコード:文字列の各インデックスに対して反復処理が正しく機能しないのはなぜですか?

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

コードが間違っています。 [0..(str.length - 2)]は、反復処理できる実際の範囲ではなく範囲オブジェクトを返します。上記の本文にreturn indexを入れると、1回の反復が行われ、出力は[0..7]のようになります。これはなぜ各番号に対して反復しないのですか?

答えて

6

[..]で範囲を囲むことによって、あなたは、単一のRangeオブジェクトを含む配列を作成しました。つまり、配列の長さは1です。あなただけが欲しい:

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

あなたが持っているのは、1つの範囲ではなくRangeを含む配列です。したがって、それぞれがその範囲の整数ではなく1つの範囲を生成しています。 []を()に置き換えればOKです。それがあるべき

2

(0..(str.length - 2)).each do |index| 
    // do something with index 
end 
関連する問題