Feature #3378
closedRange#each should not yield its `begin' itself
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
Updated by nobu (Nobuyoshi Nakada) over 14 years ago
- Category set to core
- Status changed from Open to Assigned
- Assignee set to knu (Akinori MUSHA)
=begin
r25632
=end
Updated by knu (Akinori MUSHA) over 14 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
Updated by matz (Yukihiro Matsumoto) over 14 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:41503] [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
Updated by knu (Akinori MUSHA) over 14 years ago
=begin
あ、タイトルの方を提案だと思ってしまったのですが、変更したときにそこで止まってしまうのを直せないか、
については議論の余地がありますね。
止まることを予期したプログラムというのはないと考えてもいいと思うので、もし前記の点について1.9の方で
整合性ある結論が出たら、1.8も寄り添うことは可能かも知れません。(あまり気乗りはしませんが)
=end
Updated by knu (Akinori MUSHA) over 14 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
Updated by knu (Akinori MUSHA) over 13 years ago
- Status changed from Feedback to Rejected
まあselfが返ってくることもあり、いじってしまうと影響は不定、ということで一度閉じます。
Updated by mame (Yusuke Endoh) over 13 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
Updated by mame (Yusuke Endoh) over 13 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