Какая польза от двойного подчеркивания в repeat () или других шагах в Tinkerpop Gremlin?

Я заметил, что в некоторых пошаговых функциях в Tinkerpop Gremlin 3.3 используется двойное подчеркивание. Не могли бы кто-нибудь сказать, почему мы используем это двойное подчеркивание в примере? Я не смог найти достаточно информации об этом в документации.


person livetolearn    schedule 16.11.2017    source источник


Ответы (2)


__. позволяет вам определять анонимный 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.

person jbmusso    schedule 16.11.2017

__ используется для обозначения входящего обхода (вершина или ребро) в Java API. Например: в оболочке gremlin можно написать что-то вроде этого

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

Но в java требуется анонимный обход для вызова функций out и hasLabel внутри repeat и до (или любой другой функции, например by, choose и т. Д.). Вышеупомянутый обход в Java будет выглядеть так:

graph.traversal().V().repeat(__.out("edgeType")).until(__.hasLabel("label")).toList()
person Him    schedule 16.11.2017
comment
Незначительный нюанс к вашему ответу - этот первый обход не будет работать в консоли Gremlin. in - зарезервированное слово в Groovy, поэтому на самом деле вы получите сообщение об ошибке. Если вы измените свой пример на использование out, это будет лучше. - person stephen mallette; 16.11.2017
comment
Я думаю, что __ используется для обозначения входящего обхода (вершина или ребро), что немного вводит в заблуждение. На самом деле это не относится к вершине или ребру, это просто способ определить анонимный обход. Обычно такой анонимный обход передается в качестве аргумента другому шагу обхода, и затем он определяет поведение текущего обходчика (т. Е. Фильтрацию, проецирование, ветвление и т. Д.) При повторении обхода. - person jbmusso; 16.11.2017