首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala按名称重复参数

Scala按名称重复参数
EN

Stack Overflow用户
提问于 2017-08-24 23:37:45
回答 2查看 95关注 0票数 0

我想这样做,这个参数是惰性的和可重复的:

代码语言:javascript
复制
def f(actions: (=> Try[String])*) = {
  actions.map{x =>
    if(x.isFailure) throw new Exception()
    ...
  }
}  

因此,我可以用以下方法计算参数:

代码语言:javascript
复制
f(Try("a"), Try("b"), Try[String](new Exception()), Try({print("something"); "d"}))

打印(“某样东西”)永远不会执行,因为参数是懒惰的。

取而代之的是:

代码语言:javascript
复制
def f(actions: (() => Try[String])*) = ???
f(() => Try("a"),() => Try("b"),() => Try[String](new Exception()), () => Try({print("something"); "d"}))

只是写起来很无聊。

Scala支持第一个吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-25 00:54:12

按名称参数包装如下:

代码语言:javascript
复制
implicit class ByNameWrapper[+A](a: => A) { def get: A = a }

并将您的方法定义为

代码语言:javascript
复制
def f(actions: ByNameWrapper[Try[String]]*) {
  ...
}

用法与普通的按名称命名的参数相同:

代码语言:javascript
复制
f(Try { throw new Exception }, Try { println("a"); "b" })
票数 3
EN

Stack Overflow用户

发布于 2017-08-25 00:25:15

就快到了。或者它已经在油灰里了。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45872410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档