:
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)",
堆栈跟踪更多。
请说明为什么会出现此错误。
答案 0 :(得分:0)
我没有看到任何明显的问题,为什么这个查询会给你一个堆栈溢出。但是,看看你的堆栈跟踪,我相信(虽然不确定),你的问题与你的return语句有关。您可能希望将查询分解为较小的块以查看问题发生的位置。
旁注:这里有一个提示,使您的查询更简洁:
.outE('priority').inV --write as--> out('priority')
如果您在边缘上唯一推理的是标签,那么您可以简单地在顶点之间跳转而不是触摸边缘。
最后,请注意Gremlin 1.4将使用loop()步骤提供“emit”功能。这样,你不需要在循环中将sideEffect {}保存元素放入列表中,你可以简单地发出它们。因此,更容易说,“当我循环这个分支时,返回我触摸的所有东西。”
没有直接解决方案的道歉......
马尔科。