作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Joshua D. Suereth 的 Scala In Depth,并发现了以下有关 scala 中隐式 View 的代码:
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 {})
之类的操作时,编译器还不知道您在做什么 - 它会尝试找到 bar
方法它将接受 new Foo {}
,但它还不知道 new Foo {}
到底是什么类型,因为它取决于 bar
> 是。
如果声明 val f = new Foo{}
,f
的类型就会固定,这有助于编译器找出应该对 执行的操作栏
。
关于scala - 伴生对象中的隐式 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760906/
我是一名优秀的程序员,十分优秀!