Scala: передача параметров функции в виде кортежа - PullRequest
0 голосов
/ 06 июня 2018

Допустим, у меня есть:

def foo(i: Int, s: String)

и есть:

val tuple: (Int, String) = (1, "s")

Могу ли я передать tuple в foo без добавления оболочки для foo?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Да, это возможно.Используя .tupled, можно преобразовать лямбду в принятие кортежа в качестве аргумента.

Scala REPL

scala> def foo(i: Int, s: String): Int = i
foo: (i: Int, s: String)Int

scala> (foo _).tupled
res3: ((Int, String)) => Int = scala.Function2$$Lambda$226/234698513@45984654

scala> val tuple: (Int, String) = (1, "s")
tuple: (Int, String) = (1,s)

scala> (foo _).tupled(tuple)
res5: Int = 1
0 голосов
/ 06 июня 2018

foo(tuple._1, tuple._2) должно работать.

Если вы хотите что-то более обслуживаемое, я бы порекомендовал следующее:

type MyTuple = (Int, String) 

def foo(t:MyTuple) = ??? // some code 

val tuple = (1, "s")

foo(tuple) // works

Также внутри foo лучший способ развернуть кортеж будетбыть

val (int, string) = t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...