Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 用依赖类型扩展_Scala_Extends_Dependent Type_Dotty_Scala 3 - Fatal编程技术网

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
作为类型成员而不是参数吗?刚刚修改过。查看更新的问题。顺便问一下,你能将类型参数作为同名的类型成员公开吗?如果你能处理十几个类型参数,这里有一个可能。不过,这不适合胆小的人。