Я использую java-gremlin, и так как большинство примеров, которые я читал в интернете, написаны в паре, я полагал, что личность трубы имеет особое значение в groovy, но я обнаружил, что он существует в java api, так что это значит?gremlin, что такое идентификатор _() pipe
ответ
Как описано в TinkerPop 2.x, то _()
превращает произвольный объект в трубопровод:
gremlin> x = [1,2,3]
==>1
==>2
==>3
gremlin> x._().transform{it+1}
==>2
==>3
==>4
gremlin> x = g.E.has('weight', T.gt, 0.5f).toList()
==>e[10][4-created->5]
==>e[8][1-knows->4]
gremlin> x.inV
==>[StartPipe, InPipe]
==>[StartPipe, InPipe]
gremlin> x._().inV
==>v[5]
==>v[4]
В TinkerPop 3.x, это в основном имеет тот же смысл, но мы, как правило, относятся к нему больше как начало анонимного обхода, которое не привязано к экземпляру графа. Вы можете больше узнать об этом here в недавнем посте в списке рассылки Gremlin Users. Вот как это выглядит в 3.x:
gremlin> __(1,2,3)
==>1
==>2
==>3
gremlin> __(1,2,3).map{g.V(it.get()).next()}
==>v[1]
==>v[2]
==>v[3]
Примеры его использование вкраплены в этом разделе:
http://tinkerpop.incubator.apache.org/docs/3.0.0-incubating/#graph-traversal-steps
Вы на самом деле видите это больше, чем вы думаете, что вы могли бы, как документация делает статический импорт, так что вам фактически не нужно использовать «__()». Например:
gremlin> g.V().out('knows').where(out('created'))
==>v[4]
действительно:
gremlin> g.V().out('knows').where(__().out('created'))
==>v[4]
Наконец, следует отметить, что в TinkerPop 3.x, Groovy просто "вкус" от Gremlin, который вводит маленький кусочек синтаксического сахара. Язык Гремлина в 3.x над Java 8 выглядит в основном идентичным вкусу Groovy.
http://tinkerpop.incubator.apache.org/docs/3.0.0-incubating/#_on_gremlin_language_variants