abstract class Foo[B class Goo[B trait Hoo[B new Goo(self) } :9: error: inferred t-6ren">
gpt4 book ai didi

scala - 理解 Scala 中的 "type arguments do not conform to type parameter bounds"错误

转载 作者:行者123 更新时间:2023-12-04 15:47:47 24 4
gpt4 key购买 nike

为什么以下不起作用?

scala> abstract class Foo[B<:Foo[B]]
defined class Foo

scala> class Goo[B<:Foo[B]](x: B)
defined class Goo

scala> trait Hoo[B<:Foo[B]] { self: B => new Goo(self) }
<console>:9: error: inferred type arguments [Hoo[B] with B] do not conform to class Goo's type parameter bounds [B <: Foo[B]]
trait Hoo[B<:Foo[B]] { self: B => new Goo(self) }
^

scala> trait Hoo[B<:Foo[B]] extends Foo[B] { new Goo(this) }
<console>:9: error: inferred type arguments [Hoo[B]] do not conform to class Goo's type parameter bounds [B <: Foo[B]]
trait Hoo[B<:Foo[B]] extends Foo[B] { new Goo(this) }
^

在第一次尝试中,不是 Hoo[B] with B <: Foo[B] ?

在第二次尝试中,不是 Hoo[B] <: Foo[B] ?

为了激发这个问题,有一个库:
// "Foo"
abstract class Record[PK, R <: Record[PK, R]] extends Equals { this: R =>
implicit def view(x: String) = new DefinitionHelper(x, this)
...
}
// "Hoo"
class DefinitionHelper[R <: Record[_, R]](name: String, record: R) {
def TEXT = ...
...
}

// now you can write:
class MyRecord extends Record[Int, MyRecord] {
val myfield = "myfield".TEXT
}

我正在尝试在 TEXT 旁边引入一种名为 BYTEA 的新扩展方法,以便人们可以编写:
class MyRecord extends XRecord[Int, MyRecord] {
val myfield = "myfield".BYTEA // implicit active only inside this scope
}

我的尝试:
class XDefinitionHelper[R <: Record[_, R]](name: String, record: R) {
def BYTEA = ...
}

trait XRecord[PK, R <: Record[PK, R]] { self: R =>
implicit def newView(x: String) = new XDefinitionHelper(x, self)
}

但这与我上面的较小测试用例遇到了相同的问题。

最佳答案

在第一次尝试中,您确实有 Hoo[B] with B <: Foo[B] .但是对于 Goo[Hoo[B] with B]要存在,你需要 Hoo[B] with B <: Foo[Hoo[B] with B] .第二种情况类似。

关于scala - 理解 Scala 中的 "type arguments do not conform to type parameter bounds"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840678/

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