接受Int并返回函数的函数

时间:2018-01-03 00:27:05

标签: scala functional-programming user-defined-functions scala-collections higher-order-functions

有人可以解释一下,如何编写一个带整数的函数并使用Scala函数编程返回另一个函数?要实现以下问题:一个函数将一个数字作为参数并返回一个也带有数字的新函数:

此外,当调用新函数时,它返回其参数和原始数字的总和。

问候。

2 个答案:

答案 0 :(得分:2)

我要补充的是塞巴斯蒂安的回答是它背后的概念。哪个是你定义的函数的类型?您正在寻找的是高阶函数,即将函数作为参数并返回函数的函数。

那么,以下函数f的类型是什么?

def f(n: Int): ??? = (m: Int) => n + m

正如您在=之后的Scala中的lambda表示法所看到的那样,m需要Int并返回nm的总和。您可以使用以下类型Int => Int在Scala中表达此想法。因此,您也可以同样完成功能类型:

def f(n: Int): Int => Int = (m: Int) => n + m

在REPL上:

scala> def f(n: Int): Int => Int = (m: Int) => n + m
f: (n: Int)Int => Int

如果......

scala> :t f(1)
Int => Int

和...

scala> :t f(1)(2)
Int

所以我可以这样说:

scala> def addTwo = f(2)

您能猜出addTwo的类型是什么?

scala> :t addTwo
???

我建议您到处玩耍并熟悉这些结构,它们确实使您的代码更清晰,更智能。

答案 1 :(得分:1)

我希望代码解释自己:

def f(i: Int) = (n: Int) => n + i

// some tests
val f2 = f(2)

f2(10)  // yields 12
f2(20)  // yields 22