gpt4 book ai didi

scala - 推断 mixin 上的类型参数

转载 作者:行者123 更新时间:2023-12-04 21:03:05 30 4
gpt4 key购买 nike

假设我有一些特质:

trait A[T] { def foo: T }

一个扩展它的类:
class B[T](t: T) extends A[T] { def foo = t }

以及父特征的子特征:
trait C[T] extends A[T]

我想将 C 与 B 混合。
val foo = new B("foo") with C[String]

这工作正常,但我不想再次指定类型参数,因为 B 已经是 A[String] 类型。但是,我承认 Scala 不支持以下内容:
val foo = new B("foo") with C

我的问题是类型系统中还有其他一些机制来支持在混入 C 时不必指定类型参数。 我想到的是以下内容:
trait C {
self: A[T] => ...
}

有人会认为这种东西可以解决 C 可以混入的问题。但是,它不是有效的 Scala。就像是:
trait C {
type T
self: A[T] =>
}

也不起作用。

最佳答案

这个怎么样:

scala> trait C {
| self: A[_] =>
| }
defined trait C

scala> val foo = new B("foo") with C
foo: B[String] with C = $anon$1@f2df380

scala> foo.foo
res16: String = foo

关于scala - 推断 mixin 上的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043479/

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