Я заметил, что в некоторых пошаговых функциях в Tinkerpop Gremlin 3.3 используется двойное подчеркивание. Не могли бы кто-нибудь сказать, почему мы используем это двойное подчеркивание в примере? Я не смог найти достаточно информации об этом в документации.
Какая польза от двойного подчеркивания в repeat () или других шагах в Tinkerpop Gremlin?
Ответы (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.
__ используется для обозначения входящего обхода (вершина или ребро) в 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()
in
- зарезервированное слово в Groovy, поэтому на самом деле вы получите сообщение об ошибке. Если вы измените свой пример на использование out
, это будет лучше.
- person stephen mallette; 16.11.2017