Les arguments optionnels avec la valeur par défaut en Ruby
Je voudrais créer une fonction qui a des arguments optionnels avec les valeurs par défaut
def my_function(a = nil, b=nil, c=500)
end
et appeler la fonction avec les arguments que je tiens à spécifier qu'
my_function(b=100)
Comment puis-je faire cela de Ruby 1.9.2?
OriginalL'auteur AdamNYC | 2013-05-01
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas le faire (ou quelque chose de similaire) en Ruby < 2.0. Le mieux que vous pourriez faire est de:
def foo(mand1, mand2, opt1=:opt1, opt2=:opt2, *splat, mand3, mand4, &block) p local_variables.map {|v| "#{v} = #{eval(v.to_s)}" } end
est parfaitement bien.La droite. J'ai eu tort à ce sujet. Je vais supprimer cette partie.
I
Ah, oui. Il semble que Ruby 1.9 introduit la possibilité de défaut valeurs par défaut avant de non-arguments par défaut.
OriginalL'auteur sawa
Arguments sont liés à des paramètres comme ceci:
Proc
et lié au bloc argumentraise
unArgumentError
Voici un exemple:
Donc, comme vous pouvez le voir à la fois à partir de l'étape 3 ci-dessus et de l'exemple, vous ne pouvez pas faire cela, parce que les paramètres facultatifs sont tenus de gauche à droite, mais vous souhaitez spécifier le milieu argument.
Noter que ceci a des implications sur la conception d'API: vous devez concevoir vos listes de paramètres de telle manière que les plus "instable" paramètres facultatifs, c'est à dire ceux que l'utilisateur le plus probable souhaite fournir eux-mêmes, sont les plus à gauche.
Ruby 2.0 a maintenant mot-clé arguments, ce qui est exactement ce que vous cherchez:
OriginalL'auteur Jörg W Mittag
Si vous essayez de mettre en œuvre les arguments mots-clefs? C'est censé être une nouvelle fonctionnalité de Ruby 2.0, mais vous pouvez essayer de l'imiter en 1.9.x avec une valeur de hachage des arguments à la place. Voici un post qui explique comment vous pouvez accomplir cela, ce qui donne l'exemple de code suivant:
Le lien est cassé
OriginalL'auteur hlh