我有以下参数列表功能:
def foo(a:Int, b:Int)(x:Int)(y:Int) = a * b + x - y
当我把命令放在relp
上时foo _
它告诉我
res5: (Int, Int) => Int => (Int => Int) = <function2>
第一部分需要两个int参数然后我不知道如何继续读取。
我可以使用像
foo(5,5)(10)(10)
但我不知道如何阅读它!
答案 0 :(得分:2)
通常,A =&gt; B是匿名函数的类型,当给出参数时
类型A,返回类型B的值。
现在,类型
(Int, Int) => Int => (Int => Int)
添加一些括号时可能看起来不那么混乱:
(Int, Int) => (Int => (Int => Int))
首先,将其分解为
(Int, Int) => (… => …)
即。给定两个Int
的函数返回另一个函数。该
返回的函数具有类型
(Int => (Int => Int))
即。给定Int的函数返回另一个函数,给定一个Int, 返回一个Int。
答案 1 :(得分:1)
这很容易。 (Int,Int)=&gt; Int =&gt; (Int =&gt; Int)表示2个第一步返回一个带有一些参数的函数。例如:
(Int, Int) => Function that return
(Int) => Function that return
(Int) => Int
为什么有用?因为当你有一个函数将函数作为参数列表的参数时,你可以省略括号并使用花括号。
def someFunStuff(fun: Int)(stuff: Int => Int) = {
fun*stuff(fun)
}
someFunStuff(2) { x =>
//Do some fun stuff
x * 2 / x
}
如果您想了解更多信息,请阅读Scala第二版中的第9.4章编程。