Je sais que cette question a été soulevée plusieurs fois de différentes manières. Mais ce n'est toujours pas clair pour moi. Y a-t-il un moyen de réaliser ce qui suit.
def foo(a:Int, b:Int) = {}
foo(a,b) //right way to invoke foo
foo(getParams) // is there a way to get this working without explicitly unpacking the tuple??
def getParams = {
//Some calculations
(a,b) //where a & b are Int
}
scala
parameters
tuples
scout
la source
la source
Réponses:
C'est une procédure en deux étapes. Commencez par transformer foo en fonction, puis appelez tupled dessus pour en faire une fonction d'un tuple.
la source
@ dave-griffith est mort.
Vous pouvez également appeler:
Si vous voulez vous promener dans le territoire "beaucoup plus d'informations que ce que j'ai demandé", il existe également des méthodes intégrées dans des fonctions partiellement appliquées (et sur
Function
) pour le curry. Quelques exemples d'entrées / sorties:Dans lequel la version curry est appelée avec plusieurs listes d'arguments:
Enfin, vous pouvez également décortiquer / décompresser si nécessaire.
Function
a intégré pour cela:la source
Function.tupled(foo _)(getParams)
ou celui suggéré par Dave.ÉDITER:
Pour répondre à votre commentaire:
Dans ce cas, cette astuce ne fonctionnera pas.
Vous pouvez écrire une méthode de fabrique dans l'objet compagnon de votre classe, puis obtenir la version tuplée de sa
apply
méthode en utilisant l'une des techniques susmentionnées.Avec
case class
es, vous obtenez un objet compagnon avec uneapply
méthode gratuitement, et cette technique est donc plus pratique à utiliser aveccase class
es.Je sais que c'est beaucoup de duplication de code mais hélas ... nous n'avons pas (encore) de macros! ;)
la source
Person.tupled(("Rahul", "G"))
Il est également pratique de le faire dans des objets compagnons écrits à la main.J'apprécie certaines des autres réponses qui étaient plus proches de ce que vous avez demandé, mais j'ai trouvé plus facile pour un projet actuel d'ajouter une autre fonction qui convertit les paramètres de tuple en paramètres de division:
la source
Maintenant, vous pouvez implémenter foo et lui faire prendre un paramètre de la classe Tuple2 comme ça.
la source