【问题标题】:Gremlin sideEffect variable assignment doesn't workGremlin sideEffect 变量赋值不起作用
【发布时间】:2013-02-04 06:35:55
【问题描述】:

我正在尝试使用以下构造完成逐顶点子图匹配:

a = g.v(1) 
p = g.v(5) 

a.filter{it.map() == p.map()}.out.sideEffect{p = p.out}.loop(3){it.object != null}

我应该说地图比较出人意料地工作得很好,但是副作用部分似乎没有以适当的方式修改p-vertex。当我在执行这些 Gremlin 步骤后打印 p 时 - 它看起来像一条管道。但更明确的p = g.v(p.out.id)p = g.v(p.outE.inV.id) 甚至数字i++ 副作用似乎根本不会修改该值。

我在 Neo4j Gremlin shell 和 Groovy 中都试过了。

【问题讨论】:

    标签: neo4j gremlin


    【解决方案1】:

    如果您在期望其他内容时获得了管道,请尝试使用 next() 来查看是否可以满足您的需求。请注意,当我在 sideEffect 闭包中使用 next() 时,x 会发生变化。

    gremlin> g = TinkerGraphFactory.createTinkerGraph()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> x = g.v(1)
    ==>v[1]
    gremlin> g.V.out.sideEffect{x = x.out.next()}   
    ==>v[2]
    gremlin> x
    ==>v[2]
    

    【讨论】:

    • 谢谢。虽然它在控制台中工作,但它不在我的 Groovy 类中:def t = TinkerGraphFactory.createTinkerGraph()println tdef x = t.v(1)println xt.V.out.sideEffect{x = x.out.next()} println x` 我得到:@ 987654326@
    • 在 gremlin 控制台中,它会为您迭代管道。你不只需要在你的groovy类中迭代()来强制sideEffects发生吗?换句话说,只需执行: t.V.out.sideEffect{x = x.out.next()}.iterate()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多