К сожалению, встроенные методы для кортежей довольно ограничены .
Может быть, вы хотите что-то подобное в своей личной библиотеке,
def fold2[A, B, C](x: (A, B))(f: (A, B) => C): C = f(x._1, x._2)
def fold3[A, B, C, D](x: (A, B, C))(f: (A, B, C) => D): D = f(x._1, x._2, x._3)
Ссоответствующие неявные преобразования, которые вы можете сделать,
scala> "hello world".splitAt(5).swap.fold(_ + _)
res1: java.lang.String = " worldhello"
scala> (1, 2, 3).fold((a, b, c) => (b, c, a))
res2: (Int, Int, Int) = (2,3,1)
Альтернативой последнему выражению будет оператор "pipe" |>
(получить его из Scalaz или здесь ),
scala> ('a, 'b, 'c) |> (t => (t._2, t._3, t._1))
res3: (Symbol, Symbol, Symbol) = ('b,'c,'a)
Это было бы неплохо, если бы не требуемые аннотации,
scala> ("hello ", "world") |> (((_: String) + (_: String)).tupled)
res4: java.lang.String = hello world