【问题标题】:Function that accepts an Int and returns a function接受 Int 并返回函数的函数
【发布时间】:2018-06-12 16:08:19
【问题描述】:

谁能解释一下,我如何使用 Scala 函数式编程编写一个接受整数并返回另一个函数的函数?实现以下问题:一个以数字为参数的函数并返回一个也接受数字的新函数:

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

问候。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    正如您在 Scala 中 = 之后的 lambda 表示法所见,它采用 m,它是一个 Int,并返回 nm 的总和。您可以使用以下类型在 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
    ???
    

    我建议您尝试熟悉这些结构,它们确实使您的代码更清洁、更智能。

    【讨论】:

      【解决方案2】:

      我希望代码能自行解释:

      def f(i: Int) = (n: Int) => n + i
      
      // some tests
      val f2 = f(2)
      
      f2(10)  // yields 12
      f2(20)  // yields 22
      

      【讨论】:

      • 非常感谢!代码真的是不言自明的。
      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 2015-02-10
      • 2021-03-23
      • 1970-01-01
      相关资源
      最近更新 更多