Feature #3378

Range#each should not yield its `begin' itself

Added by Yusuke Endoh almost 5 years ago. Updated almost 4 years ago.

[ruby-dev:41503]
Status:Rejected
Priority:Normal
Assignee:Akinori MUSHA

Description

=begin
遠藤です。

1.8 で、以下のコードが "A" しか出力してくれません。

$ ruby18 -ve '("A".."H").map {|x| p x; x << 1 }'
ruby 1.8.8dev (2010-05-26) [i686-linux]
"A"

"B" "C" ... "H" まで出力してほしいです。1.9 ではしてくれます。

--
Yusuke Endoh mame@tsg.ne.jp
=end

History

#1 Updated by Nobuyoshi Nakada almost 5 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to Akinori MUSHA

=begin
r25632
=end

#2 Updated by Akinori MUSHA almost 5 years ago

=begin
Rangeの左端がStringの場合をspecial-caseして(b..e).each→b.upto(e)に変換するんですが、
1.9ではString#uptoが最初の引数をdupするようになったのでこうなっています。
つまりString#uptoの仕様が変わったということです。

RangeはFixnum, Symbol, String以外の場合は左端をdupしたりはしないので、
むしろ、1.9の挙動についてもう一度考えた方がよさそうです。

・String#uptoがself.dupを返すようになったのは妥当か?
・Range#eachはすべて左端をdupしたものを渡すべきか?

どっちにしても、今さら1.8.8で仕様を変えたい気がしないことは付け加えておきます…。
=end

#3 Updated by Yukihiro Matsumoto almost 5 years ago

=begin
まつもと ゆきひろです

In message "Re: [Bug #3378] Range#each should not yield its `begin' itself"
on Wed, 2 Jun 2010 01:46:09 +0900, Yusuke Endoh redmine@ruby-lang.org writes:

|1.8 で、以下のコードが "A" しか出力してくれません。
|
| $ ruby18 -ve '("A".."H").map {|x| p x; x << 1 }'
| ruby 1.8.8dev (2010-05-26) [i686-linux]
| "A"
|
|"B" "C" ... "H" まで出力してほしいです。1.9 ではしてくれます。

mapで外から渡されたものを書き換えた場合の動作は不定です。こ
れを揃える予定はありません。1.9の挙動も今後変更されるかもし
れません。

=end

#4 Updated by Akinori MUSHA almost 5 years ago

=begin
あ、タイトルの方を提案だと思ってしまったのですが、変更したときにそこで止まってしまうのを直せないか、
については議論の余地がありますね。

止まることを予期したプログラムというのはないと考えてもいいと思うので、もし前記の点について1.9の方で
整合性ある結論が出たら、1.8も寄り添うことは可能かも知れません。(あまり気乗りはしませんが)
=end

#5 Updated by Akinori MUSHA over 4 years ago

  • Category set to lib
  • Status changed from Assigned to Feedback
  • Target version set to 2.0.0

=begin
・String#uptoがself.dupを返すようになったのは妥当か?
・Range#eachはすべて左端をdupしたものを渡すべきか?

について、もし何かあればフィードバックください。
=end

#6 Updated by Akinori MUSHA almost 4 years ago

  • Status changed from Feedback to Rejected

まあselfが返ってくることもあり、いじってしまうと影響は不定、ということで一度閉じます。

#7 Updated by Yusuke Endoh almost 4 years ago

2011/7/17 Akinori MUSHA knu@ruby-lang.org:

まあselfが返ってくることもあり、いじってしまうと影響は不定、ということで一度閉じます。

なんでこれを登録したのかもう覚えてないのですが、おそらく
この違いにハマってカッとなって登録したんだと思います。

今から見ると不定と言われてもしょうがないかなと思いますし、
1.8.7 を変えるべきとは全く思わないので、1.8.8 がなさそう
な今となっては reject で一向に構いません。
ありがとうございました。

--
Yusuke Endoh mame@tsg.ne.jp

#8 Updated by Yusuke Endoh almost 4 years ago

2011/7/17 Akinori MUSHA knu@ruby-lang.org:

まあselfが返ってくることもあり、いじってしまうと影響は不定、ということで一度閉じます。

なんでこれを登録したのかもう覚えてないのですが、おそらく
この違いにハマってカッとなって登録したんだと思います。

今から見ると不定と言われてもしょうがないかなと思いますし、
1.8.7 を変えるべきとは全く思わないので、1.8.8 がなさそう
な今となっては reject で一向に構いません。
ありがとうございました。

--
Yusuke Endoh mame@tsg.ne.jp

Also available in: Atom PDF