我正在读这本scala书,有点不确定这个语法转换为:
{{1}}
Int => Int => INT
我认为等号是函数体的开头,但不确定因为它有i => v => i + v。
有人可以澄清每种返回类型的位置以及如何将其分解,以便我可以这样做:)
答案 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 function
或function 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