【发布时间】:2018-06-12 16:08:19
【问题描述】:
谁能解释一下,我如何使用 Scala 函数式编程编写一个接受整数并返回另一个函数的函数?实现以下问题:一个以数字为参数的函数并返回一个也接受数字的新函数:
此外,当调用新函数时,它会返回其参数和原始数字之和。
问候。
【问题讨论】:
标签: scala functional-programming user-defined-functions scala-collections higher-order-functions
谁能解释一下,我如何使用 Scala 函数式编程编写一个接受整数并返回另一个函数的函数?实现以下问题:一个以数字为参数的函数并返回一个也接受数字的新函数:
此外,当调用新函数时,它会返回其参数和原始数字之和。
问候。
【问题讨论】:
标签: scala functional-programming user-defined-functions scala-collections higher-order-functions
我要补充到塞巴斯蒂安的答案是它背后的概念。您定义的函数类型是哪一种?您正在寻找的是高阶函数,即将函数作为参数并返回函数的函数。
那么,下面的函数f的类型是什么?
def f(n: Int): ??? = (m: Int) => n + m
正如您在 Scala 中 = 之后的 lambda 表示法所见,它采用 m,它是一个 Int,并返回 n 和 m 的总和。您可以使用以下类型在 Scala 中表达这个想法Int => Int。因此,您可以同样完成函数的类型:
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
???
我建议您尝试熟悉这些结构,它们确实使您的代码更清洁、更智能。
【讨论】:
我希望代码能自行解释:
def f(i: Int) = (n: Int) => n + i
// some tests
val f2 = f(2)
f2(10) // yields 12
f2(20) // yields 22
【讨论】: