我正在尝试使用TinkerPop3文档中的traversal examples。在Gremlin shell中加载了classic graph g = TinkerFactory.createClassic()
:
gremlin> marko = g.v(1)
==>v[1]
gremlin> marko
==>v[1]
然而:
gremlin> marko = g.V().has('name', 'marko')
==>v[1]
gremlin> marko
gremlin>
为什么第二种形式不能捕获v[1]
?
鉴于第二种形式,尝试使用该变量会导致错误:
gremlin> marko.out('knows')
The traversal strategies are complete and the traversal can no longer have steps added to it
Display stack trace? [yN]
答案 0 :(得分:3)
您正在处理每个结果中的不同类类型。考虑下面的控制台会话:
gremlin> g = TinkerFactory.createClassic()
==>tinkergraph[vertices:6 edges:6]
gremlin> marko = g.v(1)
==>v[1]
gremlin> marko.class
==>class com.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex
以上结果为Vertex
,但正如您所见:
gremlin> marko = g.V().has('name','marko')
==>v[1]
gremlin> marko.class
==>class com.tinkerpop.gremlin.tinkergraph.process.graph.TinkerGraphTraversal
你得到一个Traversal
个实例。您可以看到v[1]
控制台的输出,因为控制台已自动为您迭代结果。由于您已经迭代了它,marko
变为空:
gremlin> marko.hasNext()
==>false
如果您想手动迭代,请执行以下操作:
gremlin> marko = g.V().has('name','marko');null
==>null
gremlin> marko.hasNext()
==>true
gremlin> marko
==>v[1]