5
A
回答
11
是的,很可能:
>> def perform(functions:() => Unit*) = for (f <- functions) f()
>> perform(() => println("hi"),() => println("bye"))
hi
bye
perform: (functions:() => Unit*)Unit
記住,重複參數公開爲Seq[TheType]
。在這種情況下,Seq[() => Unit]
,雖然它可能有點令人困惑,因爲它看起來像像*
應該有更高的優先權,但它不。
注意,使用括號產生相同類型:
>> def perform(functions:(() => Unit)*) = for (f <- functions) f()
perform: (functions:() => Unit*)Unit
編碼愉快。
2
@pst給了你答案,我只是再添加一點點以備將來參考。
比方說,你發現自己的功能如下集合:
val fcts = List(() => println("I hate"),() => println("this"))
如果試圖在REPL
perform(fcts) // this does not compile
將無法正常工作執行此。
但是你可以告訴編譯器,你真正想實現的是通過列表作爲Java數組(這是可變參數是如何在字節碼錶示)
perform(fcts : _*) // works.
顯然,這種擱置任何Scala集合,而不僅僅是List。
在Ruby中,我們稱之爲「splatting」參數。 – 2011-08-26 16:11:01