2013-03-19 55 views
1

我有一个名为traversal.groovy(这是我从与gremlin -e traversal.groovy从命令行调用)文件下面的代码:如何打印出小鬼管/遍历结果

// Begin traversal.groovy // 

g = TinkerGraphFactory.createTinkerGraph() 
v = g.v(1) 

println v.outE.inV.name 

// End traversal.groovy // 

正如你所看到的,这是非常基本的;但是输出不是我想要的。输出是

[StartPipe, OutEdgesPipe, InVertexPipe, PropertyPipe(name)] 

当我运行在小鬼的命令行相同的代码,我得到了我在找...

gremlin> g = TinkerGraphFactory.createTinkerGraph() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> v = g.v(1) 
==>v[1] 
gremlin> v.outE.inV.name 
==>vadas 
==>josh 
==>lop 

那么,我该如何获取信息,我想以某种方式藏在[StartPipe, OutEdgesPipe, InVertexPipe, PropertyPipe(name)]?谢谢!

回答

1

感谢stephen mallette指着我在正确的方向。为了简单地打印上面遍历的每个顶点的“名称”属性,我们可以使用sideEffectiterate。生成的代码将如下所示:

// Begin traversal.groovy // 

g = TinkerGraphFactory.createTinkerGraph() 
v = g.v(1) 

v.outE.inV.sideEffect{println it.name}.iterate() 

// End traversal.groovy // 

,输出将是:

vadas 
josh 
lop 
0

你可能只是需要遍历您的管道:

http://gremlindocs.com/#methods/pipe-next

println v.outE.inV.name.next() 
+0

这是可能的东西我可以工作,但我不得不循环,我会想,因为只有返回'vadas'。我很好奇为什么'println v.outE.inV.name.iterate()'不起作用? – MuffinTheMan 2013-03-19 20:57:40

+2

我不清楚你想要做什么。 next()只会将第一个项目弹出管道。和iterate()只是通过管道吹出副作用。所以如果你的目标是打印管道中的所有东西,只需执行v.outE.inV.name.sideEffect {println it} .iterate()。如果你的下一步是稍后用名字做一些事情,把它们管理成一个类似l = []; v.outE.inV.name.fill(l); l.each {println it};请记住,gremlin repl会为你迭代你的管道,所以当你使用脚本时你必须考虑一点点。 – 2013-03-19 22:24:22