有人可以解释一下,如何编写一个带整数的函数并使用Scala函数编程返回另一个函数?要实现以下问题:一个函数将一个数字作为参数并返回一个也带有数字的新函数:
此外,当调用新函数时,它返回其参数和原始数字的总和。
问候。
答案 0 :(得分:2)
我要补充的是塞巴斯蒂安的回答是它背后的概念。哪个是你定义的函数的类型?您正在寻找的是高阶函数,即将函数作为参数并返回函数的函数。
那么,以下函数f
的类型是什么?
def f(n: Int): ??? = (m: Int) => n + m
正如您在=
之后的Scala中的lambda表示法所看到的那样,m
需要Int
并返回n
和m
的总和。您可以使用以下类型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