0

私は Gremlin-Scala を使用しており、次のコードがあります。

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

ループがいつ終了するかわからないため、サイズにアクセスできず、t.loops > x の x に間違った番号を入力すると問題が発生します。次のコードを変更しましたが、うまく機能します。それには 2 つの問題があります (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
4

1 に答える 1

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/

于 2015-01-05T02:14:36.180 に答える