From: usa@... Date: 2016-03-24T07:43:42+00:00 Subject: [ruby-dev:49528] [Ruby trunk Bug#12178] Enumerable#inject(:+) doesn't respect redefined Fixnum#+ Issue #12178 has been updated by Usaku NAKAMURA. Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONTNEED ---------------------------------------- Bug #12178: Enumerable#inject(:+) doesn't respect redefined Fixnum#+ https://bugs.ruby-lang.org/issues/12178#change-57642 * Author: Usaku NAKAMURA * Status: Closed * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONTNEED ---------------------------------------- r54120以降、Fixnum#+ を再定義している場合(する奴はいないとは思うものの)、inject(:+) の中で再定義後のメソッドが呼ばれなくなります。 ``` C:\> ruby -ve "class Fixnum; def +(o); self*o; end; end; p [1,3,5].inject(:+)" ruby 2.4.0dev (2016-03-15 trunk 54118) [x64-mswin64_100] -e:1: warning: method redefined; discarding old + 15 C:\> ruby -ve "class Fixnum; def +(o); self*o; end; end; p [1,3,5].inject(:+)" ruby 2.4.0dev (2016-03-15 trunk 54120) [x64-mswin64_100] -e:1: warning: method redefined; discarding old + 9 C:\> ruby -ve "class Fixnum; def +(o); self*o; end; end; p [1,3,5].inject(&:+)" ruby 2.4.0dev (2016-03-15 trunk 54120) [x64-mswin64_100] -e:1: warning: method redefined; discarding old + 15 ``` -- https://bugs.ruby-lang.org/