gpt4 book ai didi

scala - 伴生对象中的隐式 View

转载 作者:行者123 更新时间:2023-12-02 20:10:32 27 4
gpt4 key购买 nike

我正在阅读 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com