2017-02-18 57 views
0

我工作的一些實際問題和困惑的超級如何返回「常量」斯卡拉如何返回恆

//Complete the following definition, so that "constant5" is a function that returns 5 
// whenever it is invoked. 
val constant5 :() => Int = { 

} 

//Complete the following definition, so that "constant" is a function that when 
// invoked with integer n returns a function that returns n whenever it is invoked. 
val constant : Int =>() => Int = { 

} 

這裏是他們將如何被調用的例子

assert ({ 
    val r1 : Int = constant5() 
    val r2 : Int = constant5() 
    (r1, r2) 
} === (5, 5) 
) 

assert ({ 
    val k1 :() => Int = constant (1) 
    val k2 :() => Int = constant (2) 
    val r1 : Int = k1() 
    val r2 : Int = k1() 
    val r3 : Int = k2() 
    val r4 : Int = k2() 
    val r5 : Int = k2() 
    val r6 : Int = k1() 
    (r1, r2, r3, r4, r5, r6) 
} === (1, 1, 2, 2, 2, 1) 
) 

我有絕對不知道從哪裏開始。 我認爲新的Int(5)會解決第一個問題,但是你不能實例化Int類。

回答

6

數字本身是一個常數。方法簽名的返回類型的第一部分顯示() => Int,這意味着一個沒有輸入的函數會產生一個輸出。在你的情況下5.

整條線看起來像這樣:val constant5 :() => Int =() => 5

=背後的部分是實際實現。 () => 5表示沒有輸入,但返回5. (x: Int) => x將是一個接收Int並返回給定參數(也稱爲身份函數)的函數。

你甚至可以將它們嵌套,例如val fn: Int => Int => Int = x => y => x + y將是一個函數,它接收一個Int並返回一個新函數,該函數在調用時返回兩個參數的和。調用這個動作看起來像fn(4)(5) // 9。希望這有助於你的第二項任務。