我有一个父抽象类P:

abstract class P {
  def isEmpty: Boolean
}

然后我有2个子类EmptyNonEmpty:
class Empty extends P {
  def isEmpty: Boolean = true
}

NonEmpty中,我需要定义一个函数union,如下所示:
class NonEmpty(name: String) extends P {
  def isEmpty: Boolean = false
  def union(that: P): Unit = {
    that match {
      case e: Empty => print("empty")
      case n: NonEmpty => print("NonEmpty:" + n.name)
    }
  }
}

但是,我得到了一个错误:
14: error: value name is not a member of NonEmpty
     case n: NonEmpty => println("NonEmpty:" + n.name)
                                                 ^

怎么会?

最佳答案

只需将name设为该类的公共(即可见)值成员即可。

class NonEmpty(val name: String) extends P { ...

或者,您可以将其转换为case class。这样,该参数将自动公开,并且匹配的模式更加简洁明了。
case NonEmpty(n) => print("NonEmpty:" + n)

10-07 15:30