加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用构造函数所在的函数

发布时间:2020-12-16 09:00:50 所属栏目:安全 来源:网络整理
导读:有两个简单的类以Int作为参数: case class Foo(i: Int) class Bar(j: Int) 我可以说: List(1,2,3) map Foo 哪个工作正常,相当于更冗长: List(1,3) map {Foo(_)} 但是Bar(因为它不是案例类?)不能在同一个构造中使用: List(1,3) map Bar error: not found
有两个简单的类以Int作为参数:

case class Foo(i: Int)
     class Bar(j: Int)

我可以说:

List(1,2,3) map Foo

哪个工作正常,相当于更冗长:

List(1,3) map {Foo(_)}

但是Bar(因为它不是案例类?)不能在同一个构造中使用:

List(1,3) map Bar

  error: not found: value Bar
          List(1,3) map Bar
                          ^

是否有一些特殊的语法来引用任何构造函数并利用eta扩展?与Foo相比,List(1,3)map {new Bar(_)}似乎有点冗长.

解决方法

它适用于前一种情况,因为案例类的伴随对象扩展了适当的FunctionN特征. (对象Foo在您的示例中扩展(Int => Foo).)对于非案例类,您可以手动执行此操作:

scala> class Bar(i: Int)
defined class Bar

scala> class Bar(i: Int); object Bar extends (Int => Bar) { def apply(i: Int) = new Bar(i) }
defined class Bar
defined module Bar

scala> List(2,3) map Bar
res17: List[Bar] = List(Bar@1f99e90,Bar@1191056)

IMO最好选择新的Bar(_),因为这个额外的样板可能不值得实现这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读