【发布时间】:2016-11-16 16:02:43
【问题描述】:
所以,我调用这个函数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: _*))
}
它需要一个隐含的 Prepend 参数,我不确定我是否理解。我知道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结果的函数,它的签名是什么?
谢谢!
【问题讨论】: