因此,我调用这个函数as
(从gremlin-scala
):
case class GremlinScala[End, Labels <: HList](traversal: GraphTraversal[_, End]) {
def as(name: String, moreNames: String*)(implicit p: Prepend[Labels, End :: HNil]) =
GremlinScala[End, p.Out](traversal.as(name, moreNames: _*))
}
在此定义: https://github.com/mpollmeier/gremlin-scala/blob/master/gremlin-scala/src/main/scala/gremlin/scala/GremlinScala.scala#L239
这需要一个隐含的前置说法,这我不知道我的理解。 我知道, gremlin-scala
使用其HList跟踪哪些热点在查询as
被调用,这样以后当select
调用它知道在遍历返回指向。
这是关键: as
追加到HList。 置或前置显然,视情况而定。
这适用于一般的代码很好,但现在我想写调用一个函数as
并返回其结果。 这是我坚持:这是什么函数的返回值的签名?
最后,我增加了一个隐含的参数去我的功能,但我担心我刚才追着问题上升了一个层次。 这是我到目前为止有:
case class AsOperation[A, In <: HList](step: String) extends Operation {
def operate(g: GremlinScala[A, In]) (implicit p: Prepend[In, ::[A, HNil]]): GremlinScala[A, p.Out] = {
g.as(step)
}
}
这使得编译,但我仍然无法使用该功能! 每当我叫它,它向我抱怨说
could not find implicit value for parameter p: shapeless.ops.hlist.Prepend[In,shapeless.::[A,shapeless.HNil]]
如何编写返回结果的功能as
,什么是它的签名?
谢谢!