Tinkerpop3在不知道循环大小的情况下跳转

时间:2014-12-29 06:29:23

标签: gremlin tinkerpop3

我正在使用Gremlin-Scala,我有以下代码:

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

我不知道我的循环何时结束,所以我无法访问大小,如果我在t.loops中输入了错误的数字&gt; 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

1 个答案:

答案 0 :(得分:0)

重新解决问题:

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/