У меня есть родительский абстрактный класс P
:Scala матч подклассу с параметром
abstract class P {
def isEmpty: Boolean
}
Тогда у меня есть 2 подклассы Empty
и NonEmpty
:
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)
^
Почему?
'typeOf [NonEmpty] .member (TermName (« name »)). IsPrivateThis' is true, поэтому он уже является членом значения, как указано в другом ответе. Захваченное поле - это не просто артефакт. –
Ack! Терминология меня трогает _again_. – jwvh
Кроме того, его членство никоим образом не зависит от того, «поле было испущено в байтовом коде». Я просто устал и смутился. –