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做什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |