From: akr@... Date: 2016-03-15T14:37:05+00:00 Subject: [ruby-dev:49511] [Ruby trunk Bug#12178][Closed] Enumerable#inject(:+) doesn't respect redefined Fixnum#+ Issue #12178 has been updated by Akira Tanaka. Status changed from Open to Closed Fixed at r54122 ---------------------------------------- Bug #12178: Enumerable#inject(:+) doesn't respect redefined Fixnum#+ https://bugs.ruby-lang.org/issues/12178#change-57464 * Author: Usaku NAKAMURA * Status: Closed * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- 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/