Ruby Language Utilisation des arguments de mots clés


Exemple

Vous définissez un argument de mot clé dans une méthode en spécifiant le nom dans la définition de la méthode:

def say(message: "Hello World")
  puts message
end

say
# => "Hello World"

say message: "Today is Monday"
# => "Today is Monday"

Vous pouvez définir plusieurs arguments de mot-clé, l'ordre de définition n'est pas pertinent:

def say(message: "Hello World", before: "<p>", after: "</p>")
  puts "#{before}#{message}#{after}"
end

say
# => "<p>Hello World</p>"

say message: "Today is Monday"
# => "<p>Today is Monday</p>"

say after: "</p><hr>", message: "Today is Monday"
# => "<p>Today is Monday</p><hr>"

Les arguments de mots clés peuvent être mélangés avec des arguments positionnels:

def say(message, before: "<p>", after: "</p>")
  puts "#{before}#{message}#{after}"
end

say "Hello World", before: "<span>", after: "</span>"
# => "<span>Hello World</span>"

Le mélange de l'argument mot-clé avec l'argument positionnel était une approche très courante avant Ruby 2.1, car il n'était pas possible de définir les arguments de mot clé requis .

De plus, dans Ruby <2.0, il était très courant d'ajouter un Hash à la fin d'une définition de méthode à utiliser pour les arguments facultatifs. La syntaxe est très similaire aux arguments de mot-clé, au point que les arguments facultatifs via Hash sont compatibles avec les arguments de mots-clés Ruby 2.

def say(message, options = {})
  before = option.fetch(:before, "<p>")
  after  = option.fetch(:after, "</p>")
  puts "#{before}#{message}#{after}"
end

# The method call is syntactically equivalent to the keyword argument one
say "Hello World", before: "<span>", after: "</span>"
# => "<span>Hello World</span>"

Notez que si vous tentez de transmettre un argument de mot-clé non défini, une erreur se produira:

def say(message: "Hello World")
  puts message
end

say foo: "Hello"
# => ArgumentError: unknown keyword: foo