web-dev-qa-db-fra.com

Une méthode avec un paramètre optionnel

Existe-t-il un moyen de créer une méthode pouvant accepter un paramètre, mais pouvant également être appelée sans méthode, auquel cas le paramètre est considéré comme nil comme ci-dessous?

some_func(variable)

some_func
40
TamRock
def some_func(variable = nil)
  ...
end
72
sawa

Outre l'option plus évidente des paramètres avec des valeurs par défaut, que Sawa a déjà montré, l'utilisation de tableaux ou de hachages peut être pratique dans certains cas. Les deux solutions conservent nil en tant qu'argument.

1. Recevoir comme tableau:

def some_func(*args)
  puts args.count
end

some_func("x", nil)
# 2

2. Envoyer et recevoir comme hash:

def some_func(**args)
  puts args.count
end

some_func(a: "x", b: nil)
# 2
16
bogl

Vous pouvez également utiliser un hash comme argument et avoir plus de liberté:

def print_arg(args = {})
  if args.has_key?(:age)
    puts args[:age]
  end
end

print_arg 
# => 
print_arg(age: 35, weight: 90)
# => 35
5
Charmi