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

时间:2017-11-16 05:45:39

标签: gremlin tinkerpop3

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

2 个答案:

答案 0 :(得分:6)

__.允许您定义匿名Traversal,即。 Traversal未绑定到特定TraversalSource

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

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

import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__

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

答案 1 :(得分:0)

__用于引用Java API中的传入遍历(顶点或边)。例如:在gremlin shell中,可以编写类似这样的内容

graph.traversal().V().repeat(out("edgeType")).until(hasLabel("label")).toList()

但在java中,需要一个匿名遍历来调用函数“out”和“hasLabel”重复并直到(或任何其他函数,如by,选择等)。 Java中的上述遍历将如下所示:

graph.traversal().V().repeat(__.out("edgeType")).until(__.hasLabel("label")).toList()