11
votes

Accepter un paramètre soit comme objet individuel ou en tant que gamme d'objets

J'ai une bande de fonctions qui prennent une gamme d'objets ou un seul objet conçu pour être traité comme une matrice contenant un objet, et je cherche un moyen plus propre d'accomplir cela. Fondamentalement, je veux savoir comment je pourrais faire le sauf si partie de la fonction suivante plus concis: xxx

toute aide sera appréciée! Merci.


0 commentaires

3 Réponses :


14
votes

première chose que vous pouvez faire est d'écrire le sauf si code> logique dans une seule ligne: xxx pré>

Comme vous le voyez, je lui donne un nouveau nom ici, comme ce n'est plus un bar ou des barres, c'est maintenant définitivement une collection. p>

Le problème avec cela et votre approche d'origine est que, bien que votre fonction puisse fonctionner sur tout énumérable code>, vous forcerez Vos utilisateurs à vous donner un argument d'un type spécifique, qui brise la dactylographie du canard. P>

Un truc soigné pour résoudre partiellement ce problème est le suivant: p> xxx pré>

Je n'appelerais pas exactement cela lisible, cependant. Cela sent beaucoup comme une mauvaise conception de l'API. Vous devriez probablement mieux prendre plusieurs arguments comme celui-ci: p> xxx pré>

et laissez l'appelant décider s'il souhaite passer un seul objet ou un tableau: P>

foo("XYZ")
ary = ["abc", "def"]
foo(*ary)


1 commentaires

Merci, ce deuxième tour était ce que je cherchais. Je sais que ce n'est pas idéal, mais je suis trop simplifié: puisque j'ai de nombreux paramètres consécutifs qui se comportent comme je l'ai décrit, je ne pouvais pas utiliser que la simple écaille de la liste des paramètres.



22
votes

La solution la plus simple consiste à utiliser la méthode du noyau Array A>:

Array(a: 1, b: 2) #=> [[:a, 1], [:b, 2]]


0 commentaires

1
votes

Je suis actuellement en train d'utiliser ce: xxx


0 commentaires