Bug #408

Array#[]= 要素数が減るとき

Added by Shyouhei Urabe over 6 years ago. Updated almost 4 years ago.

Status:Rejected
Priority:Normal
Assignee:Yukihiro Matsumoto
ruby -v: Backport:

Description

=begin
以下のように謎のnilが半端に残ります

trunk/bin/ruby -ve'a = %w"A B C D E"; a[-2, 2] = nil; p a'
ruby 1.9.0 (2008-08-06 revision 17576) [x86_64-linux]
["A", "B", "C", nil]

なお1.8では残りません。

ruby_1_8/bin/ruby -ve'a = %w"A B C D E"; a[-2, 2] = nil; p a'
ruby 1.8.7 (2008-08-06 revision 17572) [x86_64-linux]
["A", "B", "C"]
=end

History

#1 Updated by Yukihiro Matsumoto over 6 years ago

  • Status changed from Open to Closed

=begin
これは1.9での仕様変更です。

1.9ではnilは要素の削除という特別な役割を失いました。
ですから ary[n,m]=nil は ary[n,m]=4 と同様にnilを挿入します。

=end

#2 Updated by Shyouhei Urabe over 6 years ago

  • Status changed from Closed to Open

=begin
仮にそうなら[-2,2]=nilでnilが*ひとつだけ*残る意味が分かりません。
この挙動はやはりバグであると思います。
=end

#3 Updated by Yukihiro Matsumoto over 6 years ago

=begin
しかし、

a = %w"A B C D E"; a[-2, 2] = 4; p a

は1.8でも["A", "B", "C", 4]になりますから、

a = %w"A B C D E"; a[-2, 2] = nil; p a

が["A", "B", "C", nil]になるというのはむしろ一貫性が増していると思います。

=end

#4 Updated by Shyouhei Urabe over 6 years ago

  • Status changed from Open to Rejected

=begin
なるほど。わかりました。
=end

Also available in: Atom PDF