我創建稱爲otherV
用戶定義的步驟,其從邊緣(e
)開始和使用單個頂點參數(無論是e.inV
e.outV
或) ,並在該邊上輸出其他頂點。怪異結果與在的Gremlin
Gremlin.defineStep('otherV', [Edge, Pipe], {Vertex v -> _().bothV.filter{!v.equals(it)}})
我g=TinkerGraphFactory.createTinkerGraph();
的otherV
一步給出了正確的結果,當我傳遞參數的頂點是這樣的:
g.v(1).bothE('knows').otherV(g.v(1)).path{it.name}{it.label}
==>[marko, knows, vadas]
==>[marko, knows, josh]
但是,當我的說法頂點首先分配給一個變量(比如,x
)在sideEffect
步驟,然後通過x
作爲我的步驟的參數,它失敗與錯誤No such property: x for class: groovysh_evaluate
。
g.v(1).sideEffect{marko=it}.bothE('knows').otherV(marko).path{it.name}{it.label}
No such property: marko for class: groovysh_evaluate
這是什麼,我做錯了?
這裏的otherV
定製步驟是如何工作的一個簡單的例子:
// g is the TinkerGraph
marko = g.v(1); vadas = g.v(2);
edge = g.e(7); // e[7][1-knows->2]
gremlin> edge.otherV(marko).map
==>{name=vadas, age=27}
gremlin> edge.otherV(vadas).map
==>{name=marko, age=29}
謝謝,斯蒂芬。是的,它並不失敗,但請注意,結果中有兩個額外的路徑,都是'[marko,knows,marko]'。但是,當傳遞'otherV(g.v(1))'時,只返回兩個正確的路徑(如我的問題中的第一種情況所示)。 – user1030497
對不起。我想我很高興看到錯誤以外的東西,並認爲我有正確的事情。我已經重新處理了我的答案。 –
謝謝,您對自定義步驟的修改適用於我的問題中的特定示例。然而,我對'otherV'步驟的想法是從任何邊緣開始,並且在給定其頂點之一的情況下,返回另一個頂點,而不考慮邊緣標籤。我在問題的最後添加了一個簡單的插圖。 – user1030497