不确定这将如何返回函数的Int

时间:2016-07-25 00:18:28

标签: scala

我正在读这本scala书,有点不确定这个语法转换为:

{{1}}
  1. bf是函数的名称。
  2. 然后冒号是函数返回类型,它是:
  3. Int => Int => INT

    我认为等号是函数体的开头,但不确定因为它有i => v => i + v。

    有人可以澄清每种返回类型的位置以及如何将其分解,以便我可以这样做:)

2 个答案:

答案 0 :(得分:4)

简短回答:

代码的返回类型可以读为Int => (Int => Int)。 它是一个函数,它接受Int的单个参数并返回一个带有另一个Int参数并返回Int。

的函数

如果你仍然感到困惑,这是写同样的方法。

val bf: Int => (Int => Int) = (a:Int) => ((b: Int) => a + b)
        |_________________|   |____________________________|
               type                  outer function
                                          |________________|
                                           inner func returned by the outer func

答案很长:

通常称为curried functionfunction currying

我假设你已经注意到了这个,这个方法最初试图得到2个Int值的总和,如下所示。

val foo = (a: Int,b: Int) => a + b

任何带有多个参数的函数都可以转换为嵌套的单个参数函数a.k.a“curried function”。 您可以像自己的问题代码一样自己编写,但是您也可以调用.curried方法/函数来获取它。

val bf = foo.curried //bf is exactly the same thing as you wrote

这通常在您无法同时定义两个参数时使用,因此当您获得第一个值时,请创建(b: Int) => YOUR_FIRST_VALUE_ALREADY_DEFINED + b的函数。并在获得第二个价值时调用它。

如何使用curried函数......

bf(4)(5) //9
val bar = bf(6) // (Int) => Int
bar(7) // 13

答案 1 :(得分:0)

功能类型与右侧相关联。 例如 Int => Int => Int相当于Int => (Int => Int)

您可以注册并通过以下讲座了解更多细节。 https://www.coursera.org/learn/progfun1/lecture/fOuQ9/lecture-2-2-currying