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

scala – 伴随对象中的隐式视图

发布时间:2020-12-16 18:11:00 所属栏目:安全 来源:网络整理
导读:我正在阅读Joshua D. Suereth的 Scala In Depth,并且在scala中遇到了关于隐式视图的以下代码: object test { trait Foo trait Bar object Foo { implicit def fooToBar(f : Foo) = new Bar{ } }} 然后定义一个需要Bar作为参数的方法: def bar(x : Bar) = p
我正在阅读Joshua D. Suereth的 Scala In Depth,并且在scala中遇到了关于隐式视图的以下代码:

object test {
  trait Foo
  trait Bar
  object Foo {
    implicit def fooToBar(f : Foo) =  new Bar{ }
  }
}

然后定义一个需要Bar作为参数的方法:

def bar(x : Bar) = println("bar")

为什么以下工作:

val f = new Foo{}
bar(f) // print "bar"

bar(new Foo{})

会导致编译器给出类型不匹配错误:

error: type mismatch;
found   : java.lang.Object with test.Foo
required: test.Bar
          bar(new Foo {})
              ^

解决方法

这是关于你在做什么的事情:

new Foo {} // Anonymous subclass of Object with trait Foo
new Foo () // Foo
new Foo    // Foo

当你做bar(new Foo {})这样的事情时,编译器还不知道你在做什么 – 它试图找到一个接受新Foo {}的bar方法,但它还不知道究竟是什么键入new Foo {},因为它取决于什么是条形码.

如果声明val f = new Foo {},则f的类型变得固定,这有助于编译器找出它应该对bar做什么.

(编辑:李大同)

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

    推荐文章
      热点阅读