Python 3 разрешит повторяющуюся распаковку, например:
>>> def foo(a, b, c): return a + b + c
...
>>> s1 = "one"
>>> s2 = ("two", "three")
>>> foo(s1, *s2)
'onetwothree'
Я видел Как применить функцию к кортежу? и scala распаковка кортежа но у меня проблемы с эмуляцией в Scala (2.13):
scala> def foo(a: String, b: String, c: String): String = a + b + c
foo: (a: String, b: String, c: String)String
scala> val s1 = "one"
s1: String = one
scala> val s2 = Seq("two", "three")
s2: Seq[String] = List(two, three)
Как я могу имитировать c foo(s1, s2: _*)
?
Ближайшее, что я получил, это с этой комбинацией uncurried/curried
, но, честно говоря, я не совсем понимаю, почему эта последняя попытка не работает:
scala> Function.uncurried((foo _).curried(s1))
res17: (String, String) => String = scala.Function$$$Lambda$897/0x0000000801070840@145f1f97
scala> Function.uncurried((foo _).curried(s1))(s2(0), s2(1))
res19: String = onetwothree
scala> Function.uncurried((foo _).curried(s1))(s2: _*)
^
error: not enough arguments for method apply: (v1: String, v2: String)String in trait Function2.
Unspecified value parameter v2.