类型,矢量和密封类Scala

时间:2017-04-18 22:15:08

标签: scala vector jena

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

[promiseA, promiseB].reduce( (prom, f) =>
    prom.then( (res = []) => f(...res.slice(-1)).then( [].concat.bind(res) ) )
, Promise.resolve() ).then(res => doSomething(...res));

function wait(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function promiseA() {
    console.log('promiseA()');
    return wait(100).then(_ => 13);
}

function promiseB(a) {
    console.log('promiseB(' + a + ')');
    return wait(100).then(_ => a + 2);
}

function doSomething(a, b) {
    console.log('doSomething(' + a + ',' + b + ')');
}

然后,我使用来自其他类的apache Jena的元素访问者来填充这些对象,如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

您无法写Fields(u,b,l),因为没有对象Fields

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

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

这样做不是为Vector对象创建一个新名称,因此您不能使用名称字段来引用它。