Use .reverse_merge or .merge in params default options

You can do as

def setup(options = {})
  options.reverse_merge :size => 25, :velocity => 10
end

and

def setup(options = {})
  { :size => 25, :velocity => 10 }.merge(options)
end

to assign default values ​​in the method parameters.

Question: which one is better? Which one do you prefer to use? Is there a difference in performance, code readability, or something else?

EDIT: I added the error ( !) by accident ... did not want to ask about the difference between the bang vs bang method

+4
source share
4 answers

I tend to use the approach reverse_merge:

options.reverse_merge(size: 25, velocity: 10)

Cause:

  • You do not need to write braces for the hash when the hash is used as an argument to a method.
  • , , , , , .
  • options, , ! reverse_merge!. (re).

, , , , .

+5

merge reverse_merge. merge! reverse_merge!, . :

def setup(options = {})
  options.reverse_merge! :size => 25, :velocity => 10
end

opts = {size: 10}
setup opts
opts      # => {size: 10, velocity: 25}

opts ! , , .

, . , , !


Rails reverse_merge:

def setup(options = {})
  options = options.reverse_merge(:size => 25, :velocity => 10)
end

, reverse_merge, , :

def reverse_merge(other_hash)
  other_hash.merge(self)
end

, . reverse_merge , , ActiveSupport, , Ruby. , - , ActiveSupport, , merge.

+1

other_hash. ,

options = options.reverse_merge(size: 25, velocity: 10)

options = { size: 25, velocity: 10 }.merge(options)

.


reverse_merge! (other_hash) public

merge, keys values . .

Note. By default, :sizethey :velocityare set only if the parameters that were passed do not already have these keys.

through the Ruby doc .

0
source

All Articles