Advanced parameters

Category:

Parameters made of hash

Using fetch with default values.

def stats(args)
  health = args.fetch(:health, 10)
  mana = args.fetch(:mana, 5)
  attack = args.fetch(:attack, 5)
  defense = args.fetch(:defense, 5)
  puts "Health: #{health}, Mana: #{mana}, Attack: #{attack}, Defense: #{defense}."
end

stats(attack: 30)

It prints: Health: 10, Mana: 5, Attack: 30, Defense: 5.


Using default arguments and merge method.

def stats(args)
  defaults = {
    health: 10,
    mana: 5,
    attack: 5,
    defense: 5
  }
  args = defaults.merge args
  health = args[:health]
  mana = args[:mana]
  attack = args[:attack]
  defense = args[:defense]
  puts "Health: #{health}, Mana: #{mana}, Attack: #{attack}, Defense: #{defense}."
end

stats(health: 30)

It prints: Health: 30, Mana: 5, Attack: 5, Defense: 5.


Keyword arguments (since Ruby 2.0)

def stats(health: 10, mana: 5, attack: 5, defense: 5)
  puts "Health: #{health}, Mana: #{mana}, Attack: #{attack}, Defense: #{defense}."
end

stats(mana: 20)

It prints: Health: 10, Mana: 20, Attack: 5, Defense: 5.