1

我正在试验 TinkerPop3 文档中的遍历示例。在Gremlin shell中用,加载了经典图: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] 
4

1 回答 1

6

您正在处理来自每个结果的不同类类型。考虑下面的控制台会话:

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

上面的结果是 aVertex但是你可以在下面看到:

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]
于 2014-12-02T20:53:30.570 回答