Dmi*_*sky 1 groovy gremlin tinkerpop tinkerpop3
我正在试验TinkerPop3 文档中的遍历示例。在Gremlin shell 中使用,加载了经典图形g = TinkerFactory.createClassic():
gremlin> marko = g.v(1)
==>v[1]
gremlin> marko
==>v[1]
Run Code Online (Sandbox Code Playgroud)
然而:
gremlin> marko = g.V().has('name', 'marko')
==>v[1]
gremlin> marko
gremlin>
Run Code Online (Sandbox Code Playgroud)
为什么第二种形式没有捕获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]
Run Code Online (Sandbox Code Playgroud)
您正在处理来自每个结果的不同类类型。考虑我的控制台会话如下:
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
Run Code Online (Sandbox Code Playgroud)
上面产生了一个Vertex但是你可以在下面看到:
gremlin> marko = g.V().has('name','marko')
==>v[1]
gremlin> marko.class
==>class com.tinkerpop.gremlin.tinkergraph.process.graph.TinkerGraphTraversal
Run Code Online (Sandbox Code Playgroud)
你得到一个Traversal实例。您会看到控制台的输出,v[1]因为控制台已自动为您迭代结果。既然你已经迭代了,marko就变空了:
gremlin> marko.hasNext()
==>false
Run Code Online (Sandbox Code Playgroud)
如果要手动迭代,请执行以下操作:
gremlin> marko = g.V().has('name','marko');null
==>null
gremlin> marko.hasNext()
==>true
gremlin> marko
==>v[1]
Run Code Online (Sandbox Code Playgroud)