Project

General

Profile

Actions

Bug #878

closed

Array#push with no argument on a frozen array

Bug #878: Array#push with no argument on a frozen array

Added by yugui (Yuki Sonoda) almost 17 years ago. Updated over 14 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
Backport:
[ruby-dev:37440]

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
http://yugui.jp
私は私をDumpする
=end

Updated by matz (Yukihiro Matsumoto) almost 17 years ago Actions #1

=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)" 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 Actions #2

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r20840.
=end

Actions

Also available in: PDF Atom