在Tinkerpop Gremlin的repeat()或其他步骤中使用双下划线有什么用?

liv*_*arn 2 gremlin tinkerpop3

我注意到在Tinkerpop Gremlin 3.3中的一些步骤函数中使用了双下划线.有人可以告诉我们为什么我们使用这个双下划线的例子吗?我在文档中找不到关于此的足够信息.

jbm*_*sso 6

__.允许你定义匿名Traversal,即.a Traversal不受特定约束TraversalSource.

在Gremlin控制台中,所有Gremlin步骤都是静态导入的,因此您永远不需要为匿名遍历添加前缀,__.除非匿名遍历以目标语言中的保留关键字开头.在Groovy中,这是默认的Gremlin风格,这是in()as()步骤的情况:因为这些是保留关键字,这两个步骤必须以前缀为前缀__.

在Java中,您可以__.通过静态导入程序中的所有步骤来避免使用前缀:

import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
Run Code Online (Sandbox Code Playgroud)

请参阅文档中的小注释部分:http://tinkerpop.apache.org/docs/3.3.0/reference/#graph-traversal-steps


Him*_*Him 3

__ 在 Java API 中用于指代传入的遍历(顶点或边)。例如:在 gremlin shell 中,可以写这样的东西

graph.traversal().V().repeat(out("edgeType")).until(hasLabel("label")).toList()
Run Code Online (Sandbox Code Playgroud)

但在java中,需要匿名遍历来在repeat和until(或任何其他函数,如by、choose等)中调用函数“out”和“hasLabel”。上面的 Java 遍历将如下所示:

graph.traversal().V().repeat(__.out("edgeType")).until(__.hasLabel("label")).toList()
Run Code Online (Sandbox Code Playgroud)

  • 我认为“__用于指代传入的遍历(顶点或边)”有点误导。它并不真正指顶点或边,它只是定义匿名遍历的一种方式。通常,这种匿名遍历作为参数传递给另一个遍历步骤,然后它指示当前遍历器在迭代遍历时的行为(即过滤、投影、分支等)。 (4认同)