Je semble ne pas être capable de le faire (que je pouvais faire en python). Permettez-moi d'expliquer ..
Supposons que j'ai la méthode suivante dans Ruby: p> maintenant pour appeler cette méthode, je pourrais faire p> et les arguments sont pris par leur ordre respectif .. Mais si je veux donner à l'ARG2 à un moment donné de ma programmation et que vous voulez les valeurs par défaut pour arg1 et arg3? P> J'ai essayé d'écrire SOMEMETHOD (arg2 = 4) Mais cela ne semble pas fonctionner dans Ruby 1.9. Ce qu'il fait, c'est qu'il pense toujours que Arg1 est 4. Dans Python, je pouvais au moins s'en sortir avec cela, mais dans Ruby, je ne suis pas sûr. Est-ce que quelqu'un a des idées élégantes? P> p>
3 Réponses :
Pour ce que vous essayez de faire de la meilleure façon de faire le meilleur moyen d'utiliser un hasch comme argument.
someMethod(:arg1 => 2, :arg3 => 5)
Seule une solution élégante pour l'instant est d'utiliser HASH comme liste de paramètres: et ultérieur dans le code utilise un hachage implicite lorsque vous appelez votre méthode: p> fail "Unknown parameter name(s) " + (options.keys - defaults.keys).join(", ") + "." unless options.length == defaults.length
Que diriez-vous de mettre les valeurs par défaut dans une variable, puis après la fusion échoue "Nom du paramètre inconnu" + (options.keys-défauts.Keys) .join (",") + "." Sauf si options.length == par défaut.Length code>
Pour être honnête, pour 2 ou 3 paramètres supplémentaires, je trouve cela énormément de travail. Je suppose qu'il serait encore plus efficace de taper les valeurs par défaut lorsque vous passez la valeur. Cela serait toutefois utile si vous avez beaucoup de paramètres dans votre méthode
ruby n'a pas d'argument de mots-clés passant. (Pas encore, de toute façon, c'est l'une des choses qui pourraient en faire entrer Ruby 2.0. Cependant, il n'y a pas de garantie et travaille sur Ruby 2.0 n'a même pas commencé em>, donc il n'y a pas de dire Quand ou même si nous verrons des arguments de mots-clés à Ruby.) Qu'est-ce qui se passe vraiment em>, est-ce: vous passez l'expression Donc, vous passez la valeur Le moyen habituel de traiter des situations telles que ceci est d'utiliser un arg2 = 4 code> comme seul argument de la liste d'arguments. Ruby est un langage strict avec une valeur passive, ce qui signifie que tous les arguments sont entièrement évalués avant leur passage à la méthode. Dans ce cas, arg2 = 4 code> est une expression d'affectation (en rubis, tout em> est une expression (c'est-à-dire tout renvoie une valeur), il n'y a pas de déclarations). Vous attribuez à la valeur littérale immédiate valeur code> 4 code> à la variable locale arg2 code>. Les expressions d'affectation toujours em> renvoient la valeur de leur côté droit, dans ce cas 4 code>. P> 4 code> comme seul argument dans votre méthode, ce qui signifie qu'elle est liée au premier paramètre obligatoire s'il y en a un (dans ce cas, il n'y en a pas), sinon au premier paramètre facultatif (dans ce cas) > arg1 code>). p> hachage code>, comme celui-ci: P> some_method(arg2: 4)
Les arguments de mots-clés ont depuis été introduits dans Ruby 2.0, en 2013: ruby-lang.org/fr/news/2013/02/24/Ruby-2-0-0-P0-IS-Releed
arg2 = 4 code> dans Ruby attribue 4 à une variable locale nomméearg2 code>, peu importe où vous le mettez, parmi les arguments d'appel de fonction également.Oui .. j'ai compris qu'après avoir essayé: p