类型、向量和密封 Class Scala

Types, Vector and Sealed Class Scala

我在 SCALA 的特征中有以下代码,

trait example {
  type Schema = Vector[String] //Variable Names

  sealed abstract class Value;
  case class URI(name: Node) extends Value
  case class Literal(value: Node) extends Value
  case class BlankNode(name: Node) extends Value
  case class Variable(name: Node) extends Value

  type Fields = Vector[Value] //vector of values

然后,我在其他 class 中使用来自 apache Jena 的元素访问者填充此对象,如下所示:

class interpreter (q:Query) extends SPARQLInterpreter {
  //val Fields = Vector[Value]
  ElementWalker.walk(q.getQueryPattern(),

    new ElementVisitorBase() {

      override def visit(el: ElementPathBlock) {

        val triples: util.Iterator[TriplePath] = el.patternElts
        while (triples.hasNext()) {
          val aux1: Triple = triples.next().asTriple()
          val u:Value = URI(aux1.getSubject())
          val b:Value = BlankNode(aux1.getPredicate)
          val l:Value = Literal(aux1.getObject()) 
        }
      }
    })

然后,我的问题是我应该如何填充特征上声明的字段类型,例如 Fields(u,b,l) 因为它是一个向量,但编译器检测到错误。

你不能写Fields(u,b,l)因为没有对象Fields

您可以做的是 val fields: Fields = Vector(u, b, l) 创建一个值名称字段,其类型为 Vector[Value] 并为其分配一些内容。

type 用于创建仅影响类型名称的类型别名。 type Fields = Vector[Value]Vector[Value] 创建了一个新名称,类型 FieldsVector[Value] 现在可以互换使用,因为它们的含义相同。

这不会为 Vector 对象创建一个新名称,因此您不能使用名称 Fields 来引用它。