Как применить функцию к кортежу?
Это должно быть легко. Как применить функцию к кортежу в 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: memoize функция независимо от того, сколько аргументов функция принимает?
- В чем разница между определением var и val в Scala?
- Подчеркивание в List.filter
- использование аргумента переменной длины в scala
- В чем разница между «def» и «val» для определения функции
- Что означает => и () => среднее значение в Scala
- Что такое расширение eta в Scala?
- Откуда возникает «плоская карта, которая имеет ***» идиоматическое выражение в Scala?
- В Scala, что такое «ранний инициализатор»?
- Как перечислить все файлы в подкаталоге в scala?
- Как определить «тип дизъюнкции» (типы объединения)?
- Прочитать весь файл в 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