我有一个输出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)
有更好的方法吗?
答案 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
您可以使用_()
代替_.apply
:fns foreach {_()}
,但我更喜欢_.apply
。