aboutsummaryrefslogtreecommitdiffstats
path: root/guides/source
diff options
context:
space:
mode:
authorFumiaki MATSUSHIMA <mtsmfm@gmail.com>2017-04-11 23:21:53 +0900
committerFumiaki MATSUSHIMA <mtsmfm@gmail.com>2017-04-18 21:37:47 +0900
commit3adbf14d65e6e883ae1d6f8478c9ee858586e758 (patch)
treef86a8ce64641ad773c7b452b2648fba538437f69 /guides/source
parent8776a7139757d0b264785c774d4e7f37d4bc1ac7 (diff)
downloadrails-3adbf14d65e6e883ae1d6f8478c9ee858586e758.tar.gz
rails-3adbf14d65e6e883ae1d6f8478c9ee858586e758.tar.bz2
rails-3adbf14d65e6e883ae1d6f8478c9ee858586e758.zip
Fix Enumerable#sum redefined warning
If we require 'active_support/core_ext/enumerable' on Ruby 2.4, we'll see following warning because `Enumerable#sum` and `Array#sum` are added in Ruby 2.4. ``` rails/rails/activesupport/lib/active_support/core_ext/enumerable.rb:20: warning: method redefined; discarding old sum ``` The minimal way to fix the warning is `alias sum sum`. ``` $ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] $ ruby -w -e "def a; end; def a; end" -e:1: warning: method redefined; discarding old a -e:1: warning: previous definition of a was here $ ruby -w -e "def a; end; alias a a; def a; end" ``` But this behavior is not intended. (@amatsuda was told by @ko1) So we should use `alias` as a meaningful way. Ruby 2.4's `sum` (`orig_sum`) assumes an `identity` is `0` when we omit `identity` so we can delegate to `orig_sum` with explicit `identity` only. In a strict sense, we can detect `identity` by check instance's class but we don't care at this time about that because calling `Enumerable#sum` is rare. In many cases, we will call `Array#sum`.
Diffstat (limited to 'guides/source')
0 files changed, 0 insertions, 0 deletions