Как принять постоянное целое число в качестве входных данных в частичной функции?

Я новичок в 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
Другие вопросы по тегам