我讀這本書階和有點不確定什麼這個語法轉化爲int:不確定如何返回的功能
def bf: Int => Int => Int = i => v => i + v
- BF是函數的名稱。
- 再經過結腸是作爲函數返回類型:
INT => INT =>內部
我假定等號是函數體的開始,但不知道因爲那時它的I => v =>我+ v
有人能明確每個返回類型,以及如何你打破它,在你的腦袋,所以我可以做同樣的:)
我讀這本書階和有點不確定什麼這個語法轉化爲int:不確定如何返回的功能
def bf: Int => Int => Int = i => v => i + v
INT => INT =>內部
我假定等號是函數體的開始,但不知道因爲那時它的I => v =>我+ v
有人能明確每個返回類型,以及如何你打破它,在你的腦袋,所以我可以做同樣的:)
簡短的回答:
代碼的返回類型可以被讀爲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
以獲取方法/函數。
val bf = foo.curried //bf is exactly the same thing as you wrote
這通常是用來當你不能在同一時間同時定義參數的,所以當你得到第一個值,使該(b: Int) => YOUR_FIRST_VALUE_ALREADY_DEFINED + b
功能。並在你獲得第二個價值時打電話給它。
如何使用咖喱功能...
bf(4)(5) //9
val bar = bf(6) // (Int) => Int
bar(7) // 13
功能類型有關聯的權利。例如對於例如 Int => Int => Int相當於Int =>(Int => Int)
更多詳細信息,您可以註冊並通過下面的講座。 https://www.coursera.org/learn/progfun1/lecture/fOuQ9/lecture-2-2-currying
'='是類型的結尾,以及值的開始。不一定是功能體。 – Bergi