-2

我是 scala 的新手,我有一个用例,我想定义一个偏函数来添加三个数字,其中一个数字是常数,两个数字可以作为输入传递,并定义另一种可以将偏函数作为输入的方法和给出它的立方体作为结果。

4

2 回答 2

2

嗯......这取决于你的常数来自哪里?

选择 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))

此外,正如许多其他人指出的那样 - 这看起来不像是部分函数的用例。您确定要 aPartial Function而不是 apartially 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
于 2017-12-18T06:28:57.957 回答
1

以下部分函数将 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

让它沉入一点:)

于 2017-12-18T06:23:04.893 回答