我想这样做,这个参数是惰性的和可重复的:
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支持第一个吗?
发布于 2017-08-25 00:54:12
按名称参数包装如下:
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" })发布于 2017-08-25 00:25:15
就快到了。或者它已经在油灰里了。
https://stackoverflow.com/questions/45872410
复制相似问题