гремлин: лимит шаг против шага - PullRequest
2 голосов
/ 03 июля 2019

Я новичок в gremlin и, обращаясь к этому сайту, я наткнулся на take() шаг.Он имеет тот же результат, что и limit(), что заставляет меня задуматься, в чем разница между ними.Я не могу найти никаких разъяснений по этому вопросу.Спасибо!

Ответы [ 2 ]

5 голосов
/ 03 июля 2019

К сожалению, это немного сбивает с толку. take() не является шагом Гремлин. Вместо этого это функция Groovy, которая применяется к концу обхода (который сам по себе является Iterator). Почти так же, как вы можете использовать take() в конце обхода, вы можете использовать другие функции Groovy:

gremlin> g.V().take(1)
==>v[1]
gremlin> g.V().collect{it.value('name')}
==>marko
==>vadas
==>lop
==>josh
==>ripple
==>peter

Конечно, если вы используете функцию Groovy для обработки конвейера, вы не сможете вернуться к шагам Gremlin:

gremlin> g.V().take(1).out()
No signature of method: org.codehaus.groovy.runtime.DefaultGroovyMethods$TakeIterator.out() is applicable for argument types: () values: []
Possible solutions: sum(), sort(), sort(groovy.lang.Closure), sort(java.util.Comparator), count(java.lang.Object), count(groovy.lang.Closure)
Type ':help' or ':h' for help.
Display stack trace? [yN]

, поэтому вы бы предпочли limit(1):

gremlin> g.V().limit(1).out()
==>v[3]
==>v[2]
==>v[4]

Конечно, если вы не используете Groovy и программируете в среде Java, тогда будет очевидно, что take() и другие подобные функции не будут вам доступны.

0 голосов
/ 03 июля 2019

Следует использовать шаг limit(), и, начиная с TinkerPop 3.4, он является каноническим способом итерации Traversal и извлечения первых n элементов.

Я не могу вспомнить, почему take() было доступно в Traversal экземплярах на момент написания этой статьи.Это звучит немного странно для меня;это может быть утечка интерфейса Iterator (или аналогичного), но я позволю сопровождающим прокомментировать это, если они прочитают этот вопрос.

Вы будете в безопасности с limit().

...