В Gremlin аргумент loop
- это количество шагов назад, которое вы хотите сделать, и вычисляется замыкание, чтобы определить, когда выйти из цикла. В этом случае, поскольку у вас есть loop(10)
, он слишком далеко вернется к точке, где конвейер не определен. Что касается замыкания, вам нужно проверить не только, является ли объект объектом, о котором идет речь, и в этом случае вам следует остановиться, но также проверить, сделали ли вы уже 10 циклов.
То, что вы действительно хотите, это примерно так:
x.both.loop(1){!it.object.equals(y) && it.loops < 10}.paths
Однако я должен добавить, что если на графике есть цикл, он с удовольствием будет пересекать цикл снова и снова и приводить к слишком большому количеству путей. Вы можете применить некоторые умные filter
и sideEffect
, чтобы избежать многократного посещения узлов.
Для получения дополнительной информации см. Страницу Loop Pattern на Gremlin Wiki .