Хотя класс DefaultGraphTraversal
равен public
, я не думаю, что он предназначен для непосредственного использования пользователями. Однако он может быть полезен для поставщиков графов, поэтому он не защищен областью действия. Придерживайтесь написания Gremlin для взаимодействия с вашим графиком, поскольку это будет самый переносимый способ , в котором вы можете создавать свои приложения. Я также хотел бы придерживаться более распространенных соглашений об именах вещей:
Graph graph = TinkerGraph.open();
GraphTraversalSource g = graph.traversal();
g.addV().property(T.id, "1").next();
g.V("1").fold().coalesce(__.unfold(),__.addV().property(T.id, "1")).next();
Это стало обычным делом для однострочного GraphTraversalSource
creation:
GraphTraversalSource g = TinkerGraph.open().traversal();
, но дело в том, что " график "для Graph
и" g "для GraphTraversalSource
.
Почему прямое использование DefaultGraphTraversal
приводит к ошибке:
gremlin> g = TinkerGraph.open().traversal();
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV().property(T.id, "1").next();
==>v[1]
gremlin> new DefaultGraphTraversal(g).V("1")
gremlin> new DefaultGraphTraversal(g).V("1").steps[0].isStartStep()
==>false
gremlin> g.V("1").steps[0].isStartStep()
==>true
Разница в том, что DefaultGraphTraversal
вызов V()
отличается от GraphTraversalSource
позвоните по номеру V()
. Первый - это середина обхода V()
, а второй - стартовый шаг. Всегда используйте GraphTraversalSource
и "g", чтобы начать писать свой Gremlin.