Scala: Déballage de tuple dans le cadre de la liste d'arguments
J'essaie d'envoyer le résultat d'un appel de la méthode n-uplet, comme partie de la liste d'argument pour une autre méthode.
Cible méthode
def printResult(title: String, result: Int, startTime: Long, endTime: Long)
Retour à partir de la méthode partielle de la liste d'arguments
def sendAndReceive(send: Array[Byte]): (Int, Long, Long)
En d'autres termes, je suis en train d'appel printResult(String, (Int, Long, Long))
. Si la méthode renvoie la signature correspond à l'appel de la méthode, ensuite, je pourrais avoir utilisé
(printResult _).tupled(sendAndReceive(heartbeat))
Il en résulte une erreur de syntaxe
printresult("Hi", Function.tupled(sendAndReceive(heartbeat))
Solution de contournement
Je suis recourir manuellement le déballage de la n-uplet, puis de l'utiliser lors de l'appel de la méthode
val tuple = sendAndReceive(heartbeat)
printResult("Heartbeat only", tuple._1, tuple._2, tuple._3)
Est-il un moyen plus élégant de les déballer et de les envoyer à un tuple dans le cadre de la liste d'arguments?
Références
Scala: la Décomposition de n-uplets dans les arguments de la fonction
Appeler une méthode à l'aide d'un tuple comme la liste des paramètres
Va tuple déballage être directement pris en charge dans des listes de paramètres dans Scala?
Tuple Déballage de la Carte, à des Opérations de
OriginalL'auteur Hanxue | 2014-06-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez effectuer les opérations suivantes:
Eh bien, c'est une question différente à celle que vous avez demandé à l'origine: "de façon plus élégante pour décompresser". 🙂 Maintenant, vous voulez le faire sans déballage.
Je ne pense pas que j'exprime à la question assez claire 🙂 je upvoted. Je veux faire quelque chose comme
invokeMethod(arg1, arg2, tuple)
Bien sûr, si vous pouvez vous changer, ou surcharge de la méthode de la signature de def printResult(titre: String, résultat: Int, startTime: Longue, endTime:) def printResult(titre: String, t: [Int, Long, Long]) vous n'avez pas à décompresser le tuple avant d'appeler printResult.
OriginalL'auteur Carl
Êtes-vous attaché à cette fonction signature?
Si c'est votre code et vous pouvez la modifier, alors vous pouvez essayer et utiliser nourrissage à la place comme ceci:
Ensuite, vous pouvez exécuter comme ceci:
OriginalL'auteur kapunga
Une approche implique des classes de cas pour le n-uplet, par exemple comme ceci,
kwargs approche peut fonctionner en supposant que tous les éléments du tuple appartiennent au même type; encore tenir compte du type de (1,2,3).productIterator est Itérateur[Tout] bien qu'un prieuré nous savons tous les éléments sont de type Int.
OriginalL'auteur elm
Cela peut en effet être atteint sans déballer le tuple à l'aide de informes (et tupling la fonction comme vous l'avez fait):
"Hi" +: sendAndReceive(???)
seulement ajoute de la valeur"Hi"
pour le tuple retourné parsendAndReceive
.OriginalL'auteur al3xar