Issue #7739 has been updated by trans (Thomas Sawyer).


To condense the discussion down, would we agree to:

    class Hash
      def reverse_merge(a, b)
        b.merge(a)
      end

      def reverse_merge!(a, b)
        b.merge!(a)
      end

      def <<(pairs)
        merge!(Hash === pairs ? pairs : Hash[*pairs])
      end

      def >>(pairs)
        reverse_merge!(Hash === pairs ? pairs : Hash[*pairs])
      end

      alias | reverse_merge
    end

That still leaves out an operator alias for #merge itself though. Do we need it, or is #| enough?

----------------------------------------
Feature #7739: Define Hash#| as Hash#reverse_merge in Rails
https://bugs.ruby-lang.org/issues/7739#change-41249

Author: alexeymuranov (Alexey Muranov)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: next minor


=begin
I suggest for to define (({Hash#|})) as (({Hash#reverse_merge})) in ((*Rails*)), in my opinion this would correspond nicely to (({Set#|})), to the logical (({#||})) and to the bitwise (({#|})):

  { :a => 1, :b => 2 } | { :b => 1, :c => 2 }  # => { :a => 1, :b => 1, :c => 2 }
=end



-- 
http://bugs.ruby-lang.org/