代码之家  ›  专栏  ›  技术社区  ›  Jason Hu

类构造函数引用回类的类型成员

  •  0
  • Jason Hu  · 技术社区  · 7 年前

    我正在尝试实现一个case类,该类旨在描述一个自动机。我目前正在做以下工作:

    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]) {
    

    我理解这个错误。但是我怎样才能强制转换呢?确切的转换是属于我所描述的自动机的吗?你知道怎么绕过这个吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jason Hu    7 年前

    我自己也有问题。确定这不能进行类型检查。即使是这样,我也无法实例化这种类型的任何实例。为了解决这个问题,我需要定义依赖函数。

    trait DepFunc {
      def apply(automaton: Automaton): Map[String, automaton.Transition]
    }
    

    然后在case类的主体内部,我可以构造 transitions :

    val transitions: Map[String, self.Transition] = transitionsGen(this)
    

    另一个观察结果是,Scala的类型系统的功能不足以描述依赖函数。例如 DepFunc 上述内容不能由描述 Function1 ,这是因为在类型级别,scala不允许引用变量名。这让人具体感受到scala无法处理依赖类型。