Как принять постоянное целое число в качестве входных данных в частичной функции?
Я новичок в Scala, у меня есть случай использования, где я хочу определить частичную функцию, чтобы добавить три числа, в которых одно число является константой, и два числа могут быть переданы в качестве входных данных, и определить другой метод, который может принимать частичную функцию в качестве ввода и дает свой куб в результате.
2 ответа
Следующая частичная функция добавляет 12345 к каждому числу в переданном ей кортеже
scala> val addConstantTo: PartialFunction[(Int, Int), Int] = {
| case (a, b) => a + b + 12345
| }
addConstantTo: PartialFunction[(Int, Int),Int] = <function1>
scala> addConstantTo((12, 34))
res4: Int = 12391
Это расширяет концепцию, программно определяя частичную функцию, которая добавляет любое число к элементам кортежа:
scala> def addTo(c: Int): PartialFunction[(Int, Int), Int] = {
| case (a, b) => a + b + c
| }
addTo: (c: Int)PartialFunction[(Int, Int),Int]
scala> val pf = addTo(3)
pf: PartialFunction[(Int, Int),Int] = <function1>
scala> pf((1, 2))
res5: Int = 6
Пусть это потонет немного:)
Ну... Это зависит от того, откуда твоя константа?
Вариант 1 - Ваша функция образует замыкание с постоянным присутствием в области видимости.
val yourConstant = 10
val pf: PartialFunction[(Int, Int), Int] = {
case (x, y) => x + y + yourConstant
}
pf((5, 10))
Выбор 2 - Ваша функция имеет локальную постоянную.
val pf: PartialFunction[(Int, Int), Int] = {
case (x, y) => x + y + 10
}
pf((5, 10))
Кроме того, как отметили многие другие - это не похоже на вариант использования частичной функции. Вы уверены, что хотите Partial Function
и не partially applied function
?
если вы искали частично примененную функцию,
// first you need a curried function
// Curries function are function which can take parameters in steps to build intermidatary functions.
def normalDef(c: Int)(x: Int, y: Int): Int = c + y + x
// normalDef: normalDef[](val c: Int)(val x: Int,val y: Int) => Int
// now you can "partially apply" this "curried" function to your partially applied function
val addTo10PartiallyApplied = normalDef(10) _
// addTo10PartiallyApplied: (Int, Int) => Int = $Lambda$1240/1924827254@46202553
val total = addTo10PartiallyApplied(1, 2)
// total: Int = 13