7

このコードが ruby​​ を「ロックアップ」するのはなぜですか? そして、それを乗り越える最善の方法は何ですか?以下に私の解決策を投稿しました。これを行う別の方法はありますか?前もって感謝します!

コード:

nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 }

私の解決策:

nums = [1, 2, 3]
adjustments = []
nums.each { |i| adjustments << i + 1 }
nums += adjustments 
4

2 に答える 2

11

これは、それぞれが列挙子を使用するためです (したがって、追加し続けても最後に到達することはありません)。

それぞれを適用する前に、配列を複製できます。

nums = [1, 2, 3] 
nums.dup.each { |i| nums << i + 1 }

もう 1 つの方法は、map で指定された余分な要素を追加することです。

nums = [1, 2, 3] 
nums += nums.map { |i|  i + 1 }
于 2012-09-02T01:37:45.927 に答える
5
nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 }

反復処理中に配列に追加しているため、実行が終了することはありません。

于 2012-09-02T01:39:06.970 に答える