按名称组合varargs和参数

时间:2016-10-19 14:09:26

标签: scala

我希望能够定义这样的函数:

def paralellize(func: ⇒ Unit *) = {
    func.par.foreach(_.apply())
}

但似乎Scala不喜欢它:

')' expected but identifier found.
def parallelize(func: => Unit *) = {
                             ^
<console>:3: '=' expected but eof found.

我认为这是由于varargs和名称参数的结合。

我的目的是能够轻松地并行化任意代码:

parallelize(
     { 
        println("a")
        Thread.sleep(1000)
        println("A")
     },
     { 
        println("b")
        Thread.sleep(1000)
        println("B")
     }
)

2 个答案:

答案 0 :(得分:4)

我不确定我是否完全理解你的问题,但是如果你想通过许多函数作为参数你可以尝试这样做

def paralellize(func: (() => Unit)* ) = {
  func.par.foreach(_.apply())
}

答案 1 :(得分:0)

卡米尔答案的较短变化:

def paralellize(func: () => Unit* ) = 
  func.par.foreach(_.apply())