Tinkerpop3 прыгает, не зная размера петли

Я использую Gremlin-Scala, и у меня есть следующий код:

val paths = w.as("a").out("next").jump(
  to = "a",
  jumpPredicate = { t: Traverser[Vertex] =>
    t.loops < 5
  }
).path.toList

Я не знаю, когда мой цикл завершится, поэтому у меня нет доступа к размеру, и если я введу неправильное число для x в t.loops> x, у меня будут проблемы. Я изменил свой код следующим образом, и он хорошо работает. у него две проблемы (1 - это уродливо 2 - мне нужно вызвать get (), что, на мой взгляд, неэффективно) Есть ли лучший способ сделать это?

val paths = w.as("a").out("next").jump(
  to = "a",
  jumpPredicate = { t: Traverser[Vertex] =>
    t.get().out("next").size > 0
  }
).path.toList

person Omid    schedule 29.12.2014    source источник


Ответы (1)


Повторите свои проблемы:

1: это уродливо - что именно вам в нем не нравится? Вы можете не указывать аннотацию типа и имена переменных ...

2: в .get нет ничего неэффективного - это простой геттер на пути, чтобы получить элемент. jump дает вам обходчик вместо элемента, чтобы у вас было больше контекста - например, обходчик. содержит информацию о том, сколько циклов вы уже сделали, путь и т. д.

Это должно работать: val paths = w.as("a").out("next").jump( "a", _.get().out("next").size > 0 ).path.toList

Другой пример цикла (поиск кратчайшего пути): http://www.michaelpollmeier.com/2014/12/27/gremlin-scala-shortest-path/

person Michael Pollmeier    schedule 05.01.2015