[ruby-dev:49511] [Ruby trunk Bug#12178][Closed] Enumerable#inject(:+) doesn't respect redefined Fixnum#+

From: akr@...
Date: 2016-03-15 14:37:05 UTC
List: ruby-dev #49511
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/

In This Thread

Prev Next