类型、向量和密封 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]
创建了一个新名称,类型 Fields
和 Vector[Value]
现在可以互换使用,因为它们的含义相同。
这不会为 Vector
对象创建一个新名称,因此您不能使用名称 Fields 来引用它。
我在 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]
创建了一个新名称,类型 Fields
和 Vector[Value]
现在可以互换使用,因为它们的含义相同。
这不会为 Vector
对象创建一个新名称,因此您不能使用名称 Fields 来引用它。