0

运行以下代码时:

def v1=[];
def p=[];
 v.as('x')
    .except(v1).sideEffect{v1.add(it)}  // step 1
    .outE('priority').inV               // step 2
    .except(p).sideEffect{p.add(it)}    // step 3
    .inE('priority').outV               // step 4
    .loop('x'){true} >> -1;             // step 5
return [vertices:v1, priorities:p];

我收到此错误:

"exception": "java.lang.StackOverflowError",
    "stacktrace": [
        "java.lang.reflect.InvocationTargetException.(InvocationTargetException.java:72)",
        "sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)",
        "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
        "java.lang.reflect.Method.invoke(Method.java:616)",
        "org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)",
        "groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)",
        "org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)",
        "groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:883)",
        "groovy.lang.Closure.call(Closure.java:410)",
        "org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForMapEntry(DefaultGroovyMethods.java:3392)",
        "org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2188)",
        "org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2205)",
        "org.codehaus.groovy.runtime.dgm$77.invoke(Unknown Source)",

还有更多堆栈跟踪。

请说明为什么会出现此错误。

4

1 回答 1

0

关于为什么这个查询给你一个堆栈溢出,我没有看到任何明显的东西。但是,查看您的堆栈跟踪,我相信(尽管不确定)您的问题出在您的 return 语句上。您可能希望将查询分解为更小的块,以查看问题发生在哪里。

旁注:这是使您的查询更简洁的提示:

.outE('priority').inV  --write as--> out('priority')

如果您在边上推理的唯一内容是标签,那么您可以简单地在顶点之间跳转而不接触边。

最后,请注意 Gremlin 1.4 将通过 loop() 步骤提供“发射”功能。通过这种方式,您不需要在循环期间将元素保存到列表中,您可以简单地懒惰地发出它们。因此,更容易说“在我循环这个分支时返回我接触的所有东西”。

抱歉没有直接的解决方案....

马尔科。

http://markorodriguez.com

于 2011-11-21T16:03:55.543 回答