Project

General

Profile

Actions

Feature #3378

closed

Range#each should not yield its `begin' itself

Added by mame (Yusuke Endoh) over 14 years ago. Updated over 13 years ago.

Status:
Rejected
Target version:
[ruby-dev:41503]

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
=end

Actions #1

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

Actions #2

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

Actions #3

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 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

Actions #4

Updated by knu (Akinori MUSHA) over 14 years ago

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

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

Actions #5

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 :

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

2011/7/17 Akinori MUSHA :

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

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

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

--
Yusuke Endoh

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0