在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界面。
当我想编写一个函数时,我遇到了这个问题,如果在给定顶点的行下面有任何名为potato的顶点,则返回true。 虽然我对这个问题的任何其他解决方案感兴趣,但我在这个阶段(作为初学者Gremliner)的目标是评估/学习Gremlin,了解它是如何工作的,尝试不同的解决方案,而不是找到最好的解决方案
答案 0 :(得分: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]