0

在 Gremlin 中,我可以如下定义一个函数:

def name_is_potato (v) { return v.has('name','potato').count() == 1}

当我打电话

name_is_potato(g.V[0])

我明白了

==>true

但是当我进入

g.V[0].filter{name_is_potato(it)}

我明白了

==>java.lang.StackOverflowError

这有什么问题?我怎样才能让它运行?我使用 Rexster 的 doghouse 基于 Web 的界面。

当我想编写一个函数时遇到了这个问题,如果在给定顶点的任何地方有任何名为土豆的顶点,该函数返回 true。虽然我对这个问题的任何其他解决方案感兴趣,但我在这个阶段的目标(作为初学者 Gremliner)是对 Gremlin 的评估/学习,了解它的工作原理,尝试不同的解决方案,而不是找到最好的解决方案.

4

1 回答 1

0

作为 2.3.0-SNAPSHOT 的一部分,已向 Gremlin 提交了针对此问题的修复:

https://github.com/tinkerpop/gremlin/issues/331

从源代码构建 rexster 应该可以解决问题。这是我在 Rexster Console 中所做的测试:

rexster[groovy]> def isVadas(v){v.name=="vadas"}
==>null
rexster[groovy]> g = rexster.getGraph("tinkergraph")
==>mocktinkertransactionalgraph[vertices:6 edges:6 directory:data/graph-example-1]
rexster[groovy]> isVadas(g.v(2))
==>true
rexster[groovy]> isVadas(g.v(1))
==>false
rexster[groovy]> g.V.filter{isVadas(it)}
==>v[2]
于 2013-01-30T19:41:17.247 回答