Scala按名称重复参数

时间:2017-08-24 23:37:46

标签: scala parameters

我想这样做,参数是懒惰且可重复的:

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支持第一个吗?

2 个答案:

答案 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)

它来了傻瓜。或者已经有点了。

https://github.com/lampepfl/dotty/issues/499