2013-01-10 80 views
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的狗窝网页界面。

当我想写一个函数时,遇到了这个问题,如果在给定顶点的某条线的任何地方有任何顶点,就返回true。 尽管我对这个问题的其他解决方案很感兴趣,但我在这个阶段(作为初学者Gremliner)的目标是Gremlin的评估/学习,感受它是如何工作的,尝试不同的解决方案,而不是找到最好的一。

+0

对不便,但您似乎遇到了一个错误。它存在于Dog House中,并且在Rexster控制台中也失败。有趣的是,它可以在独立的Gremlin发行版中使用。从脚本引擎返回结果时发生故障,并且正在转换为字符串行以返回到控制台,但我没有立即看到原因。这个例外特别没有帮助。我在rexster中创建了一个问题来跟踪:https://github.com/tinkerpop/rexster/issues/263 –

+0

它也可以通过相同Rexster实例的RESTful界面工作,指示错误的位置与您写的相同 –

+0

我在github上更新了这个问题。有一种解决方法,但还不是解决方案。 –

回答

0

一个修复一直致力于此问题的Gremlin为2.3.0-快照的一部分:

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] 
相关问题