Scala 多嵌套案例类
Scala Multiple Nested Case Clases
大家好,我在 SCALA 上创建了以下案例 class:
sealed abstract class Value;
case class U(name: String) extends Value
case class L(name: String) extends Value
case class B(name: String) extends Value
sealed abstract class Term
case class Var(name: String) extends Term //variable name
case class Val(value: Value) extends Term //value
sealed abstract class Pattern //patterns
case class BGP(subject: Term, predicate: Term, obj: Term) extends Pattern
case class And( pat1: Pattern, pat2: Pattern) extends Pattern
case class Filter(pred: Predicate, pattern: Pattern ) extends Pattern
def function(p: Pattern): Unit = p match {
case BGP(Var(x), Val(y), Val(z)) => {
val con:conv = new conv()
val valor:Value = Val(y).value
}
然后可以看到,BGP包含Term扩展为pattern,Val包含Values扩展为Term,U,L,B包含Strings扩展为Value,
在我的函数中,我想访问包含 U 或 L 或 B 大小写 classes 的字符串,例如变量 valor = Val(y).value 包含一个 U class,但是当我写 valor.XXXX 不要让我看到名称选项。最大的问题是如何从 U 访问字符串名称?
您只需在 Value
上定义它,顺便说一下,它可以是 trait
。
sealed trait Value {
def name: String
}
case class U(name: String) extends Value
case class L(name: String) extends Value
case class B(name: String) extends Value
大家好,我在 SCALA 上创建了以下案例 class:
sealed abstract class Value;
case class U(name: String) extends Value
case class L(name: String) extends Value
case class B(name: String) extends Value
sealed abstract class Term
case class Var(name: String) extends Term //variable name
case class Val(value: Value) extends Term //value
sealed abstract class Pattern //patterns
case class BGP(subject: Term, predicate: Term, obj: Term) extends Pattern
case class And( pat1: Pattern, pat2: Pattern) extends Pattern
case class Filter(pred: Predicate, pattern: Pattern ) extends Pattern
def function(p: Pattern): Unit = p match {
case BGP(Var(x), Val(y), Val(z)) => {
val con:conv = new conv()
val valor:Value = Val(y).value
}
然后可以看到,BGP包含Term扩展为pattern,Val包含Values扩展为Term,U,L,B包含Strings扩展为Value, 在我的函数中,我想访问包含 U 或 L 或 B 大小写 classes 的字符串,例如变量 valor = Val(y).value 包含一个 U class,但是当我写 valor.XXXX 不要让我看到名称选项。最大的问题是如何从 U 访问字符串名称?
您只需在 Value
上定义它,顺便说一下,它可以是 trait
。
sealed trait Value {
def name: String
}
case class U(name: String) extends Value
case class L(name: String) extends Value
case class B(name: String) extends Value