[#45318] Windows コマンドプロンプトで UTF-8を出力するには — Yuumi Yoshida <yuumi3@...>

おつかれさまです、 Yuumi3です。

11 messages 2008/08/08

[ruby-list:45360] Q:Array#eachの挙動に関して

From: 小西 弘将 <konishih@...6.so-net.ne.jp>
Date: 2008-08-20 07:03:59 UTC
List: ruby-list #45360
小西弘将です。

Array#eachの挙動についてちょっと嵌ったので、質問します。
手元にあるRubyでeachの挙動をみると次のwhile文と等価に見えます。まあ、そ
のままリソースを食いつぶすまで動き続けます。
これはこれでよいのですが、この動作はすべてのバージョンで保証されるので
しょうか?
私の感覚としては、現在の実装がそうなっているだけで、挙動は保証しないとい
う見解が正しいように思えます。
なぜ嵌ったかというと、eachのイメージとして、each開始前の集合を順に渡すと
いうイメージがあったためです。間抜けといわれればそうですが嵌りました。
こっちも割とありそうなイメージなので、こちらの方が驚きが少ないと思われる
場合、each中の自己挿入は禁止すべきだと思うのですが、実装は難しい感じがし
ます。

確認したRubyのバージョンは
	ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
です。

1.eachのコード
	a = [0,1,2,3,4,5]
	a.each do |n|
		a << n*2
	end

2.1と等価なコード
	a = [0,1,2,3,4,5]
	i = 0
	while( i < a.size ) do
		n = a[i]
		a << n*2
		i = i + 1
	end

In This Thread

Prev Next