Bug #878
closedArray#push with no argument on a frozen array
Description
=begin
Yuguiです
Freezeされた配列から0個popしようとするとArgumentErrorが発生します。
(1.8.7ではTypeError)
[1, 2].freeze.pop(0) #=> ArgumentError
一方Freezeされた配列に0個pushしようとすると何も起きません。
[1, 2].freeze.push()
これは意図されたことでしょうか?
--
Yugui yugui@yugui.jp
http://yugui.jp
私は私をDumpする
=end
Updated by matz (Yukihiro Matsumoto) almost 17 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:37440] [BUG:trunk] Array#push with no argument on a frozen array"
on Mon, 15 Dec 2008 10:56:58 +0900, "Yugui (Yuki Sonoda)" yugui@yugui.jp writes:
|Freezeされた配列から0個popしようとするとArgumentErrorが発生します。
|(1.8.7ではTypeError)
え、RuntimeErrorではなくて? 1.9ではfreezeされたオブジェクト
の操作でTypeErrorではなくRuntimeErrorが出ます。これは1.9での
仕様変更。
|[1, 2].freeze.pop(0) #=> ArgumentError
|
|一方Freezeされた配列に0個pushしようとすると何も起きません。
|
|[1, 2].freeze.push()
|
|これは意図されたことでしょうか?
単にエラーチェックの順番の問題ですねえ。popではfreezeチェッ
ク(rb_ary_modify)が先に来ているのでエラーになり、pushでは引
数の数のチェックが先なのでエラーになる前にnopであることを判
別できているわけです。
境界ケースだと思うのでどっちでも良いと思うのですが、揃えた方
が誤解は少ないでしょうね。どっちが良いと思います?
まつもと ゆきひろ /:|)
=end
Updated by matz (Yukihiro Matsumoto) almost 17 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r20840.
=end