我想这样做,参数是懒惰且可重复的:
def f(actions: (=> Try[String])*) = {
actions.map{x =>
if(x.isFailure) throw new Exception()
...
}
}
所以,我可以用这个评估参数:
f(Try("a"), Try("b"), Try[String](new Exception()), Try({print("something"); "d"}))
打印("某些")永远不会被执行,因为参数是惰性的。
而不是:
def f(actions: (() => Try[String])*) = ???
f(() => Try("a"),() => Try("b"),() => Try[String](new Exception()), () => Try({print("something"); "d"}))
只是感觉很无聊 Scala支持第一个吗?
答案 0 :(得分:3)
按名称参数换行:
implicit class ByNameWrapper[+A](a: => A) { def get: A = a }
将您的方法定义为
def f(actions: ByNameWrapper[Try[String]]*) {
...
}
用法与普通的名字参数相同:
f(Try { throw new Exception }, Try { println("a"); "b" })
答案 1 :(得分:1)
它来了傻瓜。或者已经有点了。