Как применить функцию к кортежу?
Это должно быть легко. Как применить функцию к кортежу в Scala? Viz:
scala> def f (i: Int, j: Int) = i + j f: (Int, Int) Int scala> val p = (3,4) p: (Int, Int) = (3,4) scala> fp : 6: ошибка: отсутствующие аргументы для метода f в объекте $ iw; следуйте этому методу с помощью `_ ', если вы хотите рассматривать его как частично примененную функцию Ф.П. ^ scala> f_p : 6: ошибка: значение p не является членом (Int, Int) => Int f _ p ^ scala> (f_) p : 6: ошибка: значение p не является членом (Int, Int) => Int (f_) p ^ scala> f (p) : 7: ошибка: неправильное количество аргументов для метода f: (Int, Int) Int е (р) ^ scala> grr!
Спасибо заранее.
- использование аргумента переменной длины в scala
- Оператор <: <в scala
- scala: memoize функция независимо от того, сколько аргументов функция принимает?
- Использование Null / Nothing / Unit в Scala
- В Scala, что такое «ранний инициализатор»?
- В Scala есть оператор присваивания «=» вызов метода?
- Почему объектные объекты более объектно-ориентированные?
- Как определить «тип дизъюнкции» (типы объединения)?
- Требуется уточнение для лирических идентификаторов Scala (backticks)
- Получить список имен полей из classа case
- Как написать теорему Пифагора в Скала?
- Различия между этими тремя способами определения функции в Scala
- Могу ли я получить список времени компиляции всех объектов case, которые происходят из запечатанного родителя в Scala?
В Scala 2.7:
scala> def f (i : Int, j : Int) = i + j f: (Int,Int)Int scala> val ff = f _ ff: (Int, Int) => Int = scala> val fft = Function.tupled(ff) fft: ((Int, Int)) => Int =
В Scala 2.8:
scala> def f (i : Int, j : Int) = i + j f: (i: Int,j: Int)Int scala> val ff = f _ ff: (Int, Int) => Int = scala> val fft = ff.tupled fft: ((Int, Int)) => Int =
Следуя другому ответу, можно написать (проверено с 2.11.4):
scala> def f (i: Int, j: Int) = i + j f: (i: Int, j: Int)Int scala> val ff = f _ ff: (Int, Int) => Int = scala> val p = (3,4) p: (Int, Int) = (3,4) scala> ff.tupled(p) res0: Int = 7
См. Def tupled: ((T1, T2)) ⇒ R :
Создает корневую версию этой функции: вместо 2 аргументов он принимает один аргумент scala.Tuple2 .
scala> def f (i: Int, j: Int) = i + j f: (i: Int, j: Int)Int scala> val p = (3,4) p: (Int, Int) = (3,4) scala> val ft = (f _).tupled ft: ((Int, Int)) => Int = scala> ft apply(p) res0: Int = 7