当前位置: 首页 > 知识库问答 >
问题:

Scala多重嵌套案例分类

白高逸
2023-03-14

大家好,我在SCALA上创建了以下案例类:

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并扩展到模式,Val包含值并扩展到Term,U、L、B包含字符串并扩展到Value,在我的函数中,我想访问包含U或L或B大小写类的字符串,变量valor=Val(y). value包含一个U类,例如,但当我编写valor时。XXXX没有给我显示名称选项。最大的问题是如何从U访问字符串名称?

共有1个答案

宗政子辰
2023-03-14

你只需在上定义它,顺便说一句,它可能是一种特征

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
 类似资料:
  • 我对各种case类实现有一个封闭的特性。我想为同一个匹配表达式同时对多个类进行模式匹配。我似乎不能不分解case类和它们之间的“|” 目前看起来像: 代码中的另一个位置:

  • 我是scala新手,在验证自由风格json与预定义的case类时遇到了一个问题,假设: 我在这里尝试了Java 8 jackson validator Descripte,但如何定义嵌套的case类(在映射和数组中)并抛出自定义异常消息? 非常感谢任何回答!

  • 我如何创建/模拟Spark Scala数据帧与一个案例类嵌套在顶层? 我目前正在单元测试一个在上述模式中输出数据帧的函数。为了检查相等性,我使用了toDF(),不幸的是,它给出了一个在模拟数据帧中的“_id”为nullable=true的模式,从而使测试失败(注意,函数的“实际”输出对所有内容都为nullable=true)。 我还尝试以不同的方式创建模拟数据帧,这导致了错误:https://pa

  • 我在当前项目中使用Sass(.scss)。 以下示例: HTML SCSS 这个很管用。 我可以处理多个类,同时使用嵌套样式。 在上面的示例中,我讨论了以下内容: CSS 在这种情况下,所有通常为,但为蓝色。 我如何在中与Sass嵌套?

  • Scala 函数 我们可以在 Scala 函数内定义函数,定义在函数内的函数称之为局部函数。 以下实例我们实现阶乘运算,并使用内嵌函数: object Test { def main(args: Array[String]) { println( factorial(0) ) println( factorial(1) ) println( factor

  • 本文向大家介绍Scala案例分类和不可变性,包括了Scala案例分类和不可变性的使用技巧和注意事项,需要的朋友参考一下 示例 Scala编译器默认在参数列表中为每个参数加上前缀val。这意味着,默认情况下,案例类是不可变的。每个参数都具有一个访问器方法,但是没有可变器方法。例如: 在案例类中将参数声明为var会覆盖默认行为,并使案例类可变: 案例类为“可变”的另一个实例是案例类中的值是可变的: 请