Вы не дают какого-либо существенного кода, который показывает, как вы используете цикл, но я думаю, что с правильными аргументами вы можете получить его, чтобы сделать то, что вы хотите:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).as('x').out.gather.scatter.loop('x'){true}{true}
==>v[2]
==>v[4]
==>v[3]
==>v[5]
==>v[3]
Я предполагаю, что вы понять код через сбор/разброс и первую часть цикла, которая указывает на x
. Итак, с учетом этого предположения, я сосредоточусь на двух замыканиях, переданных в цикл.
Первое замыкание, переданное в цикл, указывает Гремлину, когда выйдет из цикла. Просто вернув истину, вы говорите, чтобы выпустить цикл. В зависимости от структуры вашего графика это может быть нежелательным, так как вы можете долго ждать, пока результат вернется. Как минимум, вы должны подумать о том, чтобы установить его на нечто невероятно высокое, чтобы, если вы нажмете какой-то цикл на графике, ваш обход разрывается.
Второе закрытие известно как «испускающее замыкание». Вы можете узнать больше об этом here, но в основном он определяет, должны ли возвращаться промежуточные объекты в трубе (а не только те, которые находятся в конце цикла). В этом случае вы можете увидеть, что я просто установил это значение в true
, чтобы он выдавал все объекты на всех этапах цикла.
Спасибо, Стивен, это сработало! – Eamonn
Я думаю, что использование сбора/разброса в этом цикле избыточно, потому что конвейер внутри цикла оценивается по ширине: https://groups.google.com/forum/#!msg/gremlin-users/X8sOoijCPhY/67- hlKiKy5EJ –
Что делать, если я хочу включить в результат начальную вершину v (1)? –