Enumerable là module mixin — class nào implement each đều có thể include Enumerable để nhận ngay ~60 method: map, select, reject, inject, sort_by, group_by, flat_map...
ruby
nums = [1, 2, 3, 4, 5]
nums.map { |n| n ** 2 } # => [1, 4, 9, 16, 25]
nums.select(&:odd?) # => [1, 3, 5]
nums.inject(0) { |sum, n| sum + n } # => 15
nums.inject(:+) # shorthand => 15
(1..6).group_by { |n| n % 3 } # => {1=>[1,4], 2=>[2,5], 0=>[3,6]}Class nào implement each và include Enumerable sẽ nhận toàn bộ ~60 method này miễn phí.
Enumerable is a mixin module — any class that implements each can include Enumerable and instantly gain ~60 methods: map, select, reject, inject, sort_by, group_by, flat_map...
ruby
nums = [1, 2, 3, 4, 5]
nums.map { |n| n ** 2 } # => [1, 4, 9, 16, 25]
nums.select(&:odd?) # => [1, 3, 5]
nums.inject(0) { |sum, n| sum + n } # => 15
nums.inject(:+) # shorthand => 15
(1..6).group_by { |n| n % 3 } # => {1=>[1,4], 2=>[2,5], 0=>[3,6]}Any class that implements each and include Enumerable gets all ~60 methods for free.