[#46807] [ruby-trunk - Bug #7625][Open] Arrayを継承したオブジェクトのcompactがArrayを返す — "mogya@... (Daisuke Furukawa)" <mogya@...>

19 messages 2012/12/26

[#46822] [ruby-trunk - Feature #7639][Open] More freedom for location of comments — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

14 messages 2012/12/30

[ruby-dev:46691] [Ruby 1.8 - Bug #7493] ブロックを渡された場合最初の1要素のみを返すEnumeratorに対してnextを送り続けると、2度目にStopIteration例外が発生する

From: "kachick (Kenichi Kamiya)" <kachick1@...>
Date: 2012-12-02 19:12:00 UTC
List: ruby-dev #46691
Issue #7493 has been updated by kachick (Kenichi Kamiya).


* 頂いたパッチを反映させた後、期待通りの動作になることを確認しました。
* 1.8.7で本パッチの取り込まれる可能性が低いという点について理解出来ました。

また、1.8と1.9+でのnext割込箇所の差異はこれまで意識したことがありませんでした。
空ブロックの評価値から設計の方向性を判断する点等、大変勉強になります。

御対応・御教示の程、有難うございました。
----------------------------------------
Bug #7493: ブロックを渡された場合最初の1要素のみを返すEnumeratorに対してnextを送り続けると、2度目にStopIteration例外が発生する
https://bugs.ruby-lang.org/issues/7493#change-34326

Author: kachick (Kenichi Kamiya)
Status: Closed
Priority: Normal
Assignee: 
Category: 
Target version: Ruby 1.8.7
ruby -v: ruby 1.8.7 (2012-10-12 patchlevel 371) [x86_64-linux]


「ブロック付きで動かした場合、最初に見つかった1要素のみを返すメソッド」からEnumeratorを作ると、
2度目のnextでStopIteration例外を返すようです。
思い至った限りで確認したメソッドは、以下の物です。

* Array#index
* Array#find_index
* Array#rindex
* Enumerable#detect
* Enumerable#find

これは、1.8.7と1.9間の仕様に於ける差異と考えた方が良いのでしょうか?
生成されたEnumeratorに対してto_aを送ると全要素を含むArrayが返る事から、
1.8.7に於いても全要素走査出来る方が自然では無いかと感じました。

# to_aとの差異は、dbussinkの指摘で気づくことが出来ました。
# https://github.com/rubinius/rubinius/pull/2063#issuecomment-10881875

  array = [:a, :b, :c]
  index_enum = array.index
  index_enum.to_a #=> [:a, :b, :c]
  index_enum.next #=> :a
  index_enum.next #=> StopIteration: iteration reached at end


-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next