0

グレムリンでは、次のように関数を定義できます。

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の犬小屋のWebベースのインターフェースを使用しています。

この問題は、指定された頂点からラインのどこかにpotatoという名前の頂点がある場合にtrueを返す関数を作成したいときに発生しました。私はこの問題の他の解決策に興味がありますが、この段階での私の目標(初心者のGremlinerとして)は、Gremlinの評価/学習であり、最良の解決策を見つけるのではなく、さまざまな解決策を試して、それがどのように機能するかを感じ取ってください。 。

4

1 に答える 1

0

2.3.0の一部として、この問題の修正がGremlinにコミットされました-SNAPSHOT:

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

ソースからrexsterを構築すると、問題の解決策が提示されます。RexsterConsoleで行ったテストは次のとおりです。

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 に答える