scala tuple déballage
Je sais que cette question a été soulevée à de nombreuses reprises dans différentes manières. Mais il n'est pas encore clair pour moi. Est-il un moyen pour atteindre les objectifs suivants.
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
}
- Que faire si toto se trouve être le constructeur de la classe?
- Double Possible de Comment faire pour appliquer une fonction à un tuple?
Vous devez vous connecter pour publier un commentaire.
C'est une procédure en deux étapes. Premier tour foo dans une fonction, puis d'appeler tupled sur elle pour en faire une fonction d'un tuple.
@dave-griffith est mort sur.
Vous pouvez aussi appeler:
Si vous voulez flâner dans la "voie à plus d'information que j'ai demandé" un territoire, il existe également des méthodes intégrées partiellement appliquée fonctions (et sur
Function
) pour le nourrissage. Quelques-uns d'entrée/sortie des exemples:Dans lequel la au curry version est invoqué avec plusieurs listes d'arguments:
Enfin, vous pouvez également uncurry/untuple si nécessaire.
Function
a les builtins pour cela:Function.tupled(foo _)(getParams)
ou celui proposé par Dave.EDIT:
Pour répondre à votre commentaire:
Dans ce cas, cette astuce ne fonctionne pas.
Vous pouvez écrire une méthode de fabrique dans le compagnon objet de votre classe, puis obtenir l'tupled version de son
apply
méthode à l'aide de ces techniques.Avec
case class
es, vous obtenez un compagnon objet avec uneapply
méthode pour libre, et donc cette technique est plus pratique à utiliser aveccase class
es.Je sais que c'est beaucoup de duplication de code, mais hélas... nous n'avons pas les macros (encore)! 😉
Person.tupled(("Rahul", "G"))
Il est très pratique de le faire dans écrites à la main, compagnon d'objets trop.J'apprécie certains de l'autre les réponses qui ont été plus proche de ce que vous avez demandé, mais je l'ai trouvé plus facile pour un projet en cours pour ajouter une autre fonction qui convertit tuple paramètres dans le split paramètres:
Maintenant, vous pouvez mettre en œuvre toto et lui faire prendre un param de la Tuple2 classe comme si.