我有以下與參數列表功能:鑽營如何工作
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)
,但我不知道如何讀呢!
我有以下與參數列表功能:鑽營如何工作
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)
,但我不知道如何讀呢!
一般情況下,A => B是一個匿名函數,鑑於 A型的參數時,返回類型爲B. 的價值現在的類型,類型 (Int, Int) => Int => (Int => Int)
可能看起來不那麼混亂,當你添加一些括號:
(Int, Int) => (Int => (Int => Int))
作爲一個開始,只是把它分解到
(Int, Int) => (… => …)
即給定兩個Int
的函數返回另一個函數。返回的 函數具有類型
(Int => (Int => Int))
即函數,給定一個Int,返回,給出一個Int, 返回int另一功能。
這很容易。 (Int,Int)=> Int =>(Int => 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章編程。