From: matz@... Date: 2015-05-10T15:35:11+00:00 Subject: [ruby-dev:48963] [Ruby trunk - Bug #11130] Re: [ruby-changes:38376] glass:r50457 (trunk): * enum.c (enum_to_a): Use size to set array capa when possible. Issue #11130 has been updated by Yukihiro Matsumoto. そもそもsizeがnilでも整数でもない値を返すのはどうにもバグっぽいので、新しい挙動でバグが発見されたと考えそうな気がしますが、sizeに手を付けずこの挙動を維持してほしい(後方互換性の維持以外の)理由ってのがあれば教えてください。 Matz. ---------------------------------------- Bug #11130: Re: [ruby-changes:38376] glass:r50457 (trunk): * enum.c (enum_to_a): Use size to set array capa when possible. https://bugs.ruby-lang.org/issues/11130#change-52367 * Author: Kouhei Sutou * Status: Assigned * Priority: Normal * Assignee: Masaki Matsushita * ruby -v: r50457 * Backport: 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED ---------------------------------------- 須藤です。 ~~~diff + if (NIL_P(size) || size == Qundef) { + ary = rb_ary_new(); + } + else { + ary = rb_ary_new_capa(NUM2LONG(size)); + } ~~~ を ~~~c if (FIXNUM_P(size)) { ary = rb_ary_new_capa(NUM2LONG(size)); } else { ary = rb_ary_new(); } ~~~ とかsizeが返す値が数値じゃなかったらこれまでと同じ挙動にする ようにしてもらえないでしょうか? これまでは ~~~ruby class NonIntegerSizeEnum include Enumerable def initialize(n) @n = n end def each @n.times { |i| yield i } end def size :size end end NonIntegerSizeEnum.new(100).to_a ~~~ というコードが動いていたんですが、この変更の後からは > /tmp/b.rb:17:in `to_a': no implicit conversion of Symbol into Integer (TypeError) というエラーがでるようになってしまって困っています。 -- https://bugs.ruby-lang.org/