我在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),因为它是一个向量,但编译器会检测到错误。
答案 0 :(得分:1)
您无法写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
对象创建一个新名称,因此您不能使用名称字段来引用它。