2016-11-15 4 views
1

だから、私は(gremlin-scalaから)この機能asを呼び出しています:シェイプレスとグレムリンスカラ: `as 'の呼び出しの結果をどうやって返すのですか?

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を使用することを知っています。が呼び出され、後でselectが呼び出されたときに、それが返されるトラバーサルのポイントが分かります。

これはキーです:asがそのHListに追加されます。場合によっては、明らかに前に付いています。

これは一般的なコードで正常に動作しますが、今はasを呼び出してその結果を返します。これは私が立ち往生している場所です:この関数の戻り値の署名は何ですか?

最後に、私の関数に暗黙的なparamを追加しましたが、私はちょうどレベルまで問題を追いかけることを恐れています。ここに私がこれまで持っているものがあります:

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の結果を返す関数を書くか、およびその署名は何であることを私に文句を言いますか?

ありがとうございます!

答えて

2

正しく説明したとおり、前置符号を使用するのは、asというラベルの付いたステップの種類を保持するためです。キャプチャと再生の両面で処理する方が簡単なので、逆の順序に保ちます。

したがって、implicit p: Prepend[Labels, End :: HNil]は現在のステップでタイプを前に付けるので、2番目のタイプのパラメータでキャプチャされます(後のステップで使用できます、たとえばselect)。私の知る限り、あなたは正確に正しいことをやっている見ることができ、それが実際に動作...私にとってはとにかくとして

:)

これは、コンパイルされます。

import gremlin.scala._ 
import shapeless.{HNil, ::} 
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory 
def graph = TinkerFactory.createModern.asScala 
val gs1: GremlinScala[Vertex, Vertex :: HNil] = graph.V().as("a") 
val gs2: GremlinScala[Vertex, Vertex :: HNil] = AsOperation("someLabel").operate(graph.V()) 
+0

あなたは正しいです!これはコンパイルして動作します。それは私の問題が1つ上のレベルであることが判明しました。私はこのような一連の操作を適用するためにRightFoldでPoly2を使用しています。私はこの問題のために新しい質問をします。答えてくれてありがとう! (gremlin-scalaを愛し、書いてくれてありがとう) – prismofeverything

+0

さて、新しい質問はこちら:http://stackoverflow.com/questions/40754229/scala-gremlin-scala-hlists-poly2-rightfold-and-a-missing -implicit-prepend – prismofeverything

関連する問題