我想要做以下事情
trait Stateful {
type State
}
case class SystemState(system: Stateful, state: system.State) // does not compile
换言之,state
的类型取决于(system
的值)。然而,这是不被支持的:
非法的依赖方法类型:参数在同一部分或更早的部分中出现在另一个参数的类型中
使用函数参数,我可以将参数拆分成两个参数列表,但在 case class 构造函数中无法实现:
def f(system: Stateful)(state: system.State): Unit = {} // compiles
我能做到的最好就是:
case class SystemState[S](system: Stateful { type State = S }, state: S) // compiles
但我认为应该可以不使用类型参数,因为在Dotty中,类型参数可以被转换为类型成员。
那么我的问题是,是否可以在不使用类型参数的情况下表达它?
在更一般的背景下,我正在探索在多大程度上可以用类型成员代替类型参数,以及何时这样做是一个好主意。