2015-05-13 58 views
0

下面的代碼行不言自明匿名函數匹配簽名()=>單位:斯卡拉

type a =() => Unit 

def k(a_ : a) = { 
    a_() 
} 

def g(): Unit = { 
    println("Hello World") 
} 

k(g) 

我的問題是如何指定a類型的匿名函數調用時K +

+0

以相同的線,'鍵入= INT => Unit' 'DEF K(A_:1)= {'' a_' '}' 'DEF克(I:智力):單位= {' 'println(「Hello World」+ i)' '}' 'k(g)',要執行上述函數'k(a_:a)',我將無法指定'一個_()',因爲它會期望Int參數,如何執行該功能 –

回答

2

我希望這些線路也言自明:

scala> k(() => println("Hello!")) //to your first question 
Hello! 

對於第二個問題:

scala> def k(i: Int)(a_ : a) = { 
    a_(i) 
} 
k: (i: Int)(a_: Int => Unit)Unit 

scala> k(5)(g) 
Swami saranam 5 

附:我不建議以小寫字母開頭type別名。

+0

我明白第一個答案,謝謝你。 –

+0

第二是無論如何你必須指定你的輸入'i',所以你需要一些函數來處理它 - 所以我寫了'print'函數 - 它需要'i'並且調用'k'和'​​g '''''''' – dk14

+0

但我的'type a = Int => Unit'這次是不同的,在'k'的函數體中不能有'a _()'來獲得執行的功能,對不起,如果我聽起來很困惑 –