我正在尝试实现一个用于描述自动机的案例类。我目前正在做以下事情:
case class Automaton(alphabet: Set[String], initial: String, finish: Set[String],
transitions: Map[String, self.Transition] { self =>
trait Transition
// concrete things omitted
}
请注意我希望如何定义transitions
。我希望这对你有意义,我想以这种方式实现。但是,当我尝试编译时,编译器报告了以下错误:
Error:(21, 47) not found: value self
transitions: Map[String, self.Transition]) {
我理解错误。但是,我怎么能强制过渡是属于我描述的自动机的确切过渡?知道怎么解决这个问题吗?
答案 0 :(得分:0)
我自己解决了这个问题。当然这不能打字检查。即使它确实如此,我也无法实例化此类型的任何实例。为了避免这种情况,我需要定义依赖函数。
trait DepFunc {
def apply(automaton: Automaton): Map[String, automaton.Transition]
}
然后在case类的主体内部,我可以构造transitions
:
val transitions: Map[String, self.Transition] = transitionsGen(this)
另外一个观察结果是,Scala的类型系统不足以描述依赖函数。例如,DepFunc
无法描述上面的特征Function1
,这是因为在类型级别,scala不允许引用变量名称。这给出了斯卡拉无法处理依赖类型的具体感觉。