gpt4 book ai didi

scala - 在scala中的特征中初始化特征

转载 作者:行者123 更新时间:2023-12-01 08:17:24 24 4
gpt4 key购买 nike

Scala in Depth有这个例子:

trait Logger {
def log(category: String, msg: String) : Unit = {
println(msg)
}
}

trait DataAccess {
def query[A](in: String) : A = {
...
}
}

trait LoggedDataAccess {
val logger = new Logger
val dao = new DataAccess

def query[A](in: String) : A = {
logger.log("QUERY", in)

dao.query(in)
}
}

我对 trait LoggedDataAccess 中的 Logger 和 DataAccess 的初始化有点困惑。在 REPL 中,当我输入这段代码时,我得到以下异常:

 error: trait Logger is abstract; cannot be instantiated
val logger = new Logger

一个特质真的可以这样初始化吗?

最佳答案

Trait 不能被实例化,但是你可以创建一个 trait 匿名实现的实例:

scala> trait Test
defined trait Test

scala> new Test
<console>:9: error: trait Test is abstract; cannot be instantiated
new Test
^

scala> new Test{}
res0: Test = $anon$1@7fafd333

scala> new Object with Test
res1: Test = $anon$1@4fe11d82

new Test{}new Object with Test 含义相同。他们创建新的匿名类并立即实例化它。

关于scala - 在scala中的特征中初始化特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718486/

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