Scala 用依赖类型扩展
以下是我的问题的最小再现:Scala 用依赖类型扩展,scala,extends,dependent-type,dotty,scala-3,Scala,Extends,Dependent Type,Dotty,Scala 3,以下是我的问题的最小再现: trait Superclass[T] class A(val key: Any) extends Superclass[key.type] val x: Superclass["123"] = A("123") 如您所见,我试图将静态已知的键类型编码到type参数中。 这不像我可以把key的类型作为a的类型参数,因为在我的实际示例中,它更像class(使用g:blablah)(val-key:g.ke
trait Superclass[T]
class A(val key: Any) extends Superclass[key.type]
val x: Superclass["123"] = A("123")
如您所见,我试图将静态已知的键类型编码到type参数中。
这不像我可以把key
的类型作为a的类型参数,因为在我的实际示例中,它更像class(使用g:blablah)(val-key:g.key)扩展了超类[g.Mapping[key.type]]
,但这与上面的问题无关
只是我们不能在超类的参数中使用依赖类型吗
更新
使用类型成员编码会产生相同的错误:
trait Superclass {
type T
}
class A(val key: Any) extends Superclass {
type T = key.type
}
val x: Superclass & {type T = "123"} = A("123")
我还是会
[error] 14 | val x: Superclass & {type T = "123"} = A("123")
[error] | ^^^^^^^^
[error] | Found: Main.A
[error] | Required: Main.Superclass & Object{T = ("123" : String)}
我无法围绕您给出的示例展开工作,但这可能适用于您的实际用例
trait超类[T]
//G型
特福:
类型键
类型映射[K你能修改Superclass
以将T
作为类型成员而不是参数吗?刚刚修改过。查看更新的问题。顺便问一下,你能将类型参数作为同名的类型成员公开吗?如果你能处理十几个类型参数,这里有一个可能。不过,这不适合胆小的人。