规范和执行输出单位的方法的规范方法?

时间:2014-10-20 07:04:06

标签: scala

我有一个输出Unit的方法(函数)列表:

var fns:List[() => Unit] = Nil
def add(fn:() => Unit) = fns :+= fn      // a method to add to the list

我想将println("hello")添加到列表中。

add(() => println("hello"))  

有没有比使用丑陋括号更好的方法。

我更喜欢:

add (println("hello"))  // error here 

def myCoolMethod = {
   // do something cool
   // may return something, not necessarily Unit
}
add (myCoolMethod) // error here

我尝试了var fns:List[_ => Unit]var fns:List[Any => Unit]fns:List[() => Any]等,却没有得到我想要的东西。

第二个问题是如何在我想要的时候执行列表中的方法。我得到了它的工作:

fns foreach (_.apply) 

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用by-name参数代替带有空参数列表的函数,如下所示:

var fns:List[() => Unit] = Nil
def add(fn: => Unit) = fns :+= (fn _)

add{ print("hello ") }

def myCoolMethod = { println("world") }
add(myCoolMethod)

fns foreach {_.apply}
// hello world

您可以使用_()代替_.applyfns foreach {_()},但我更喜欢_.apply