我刚接触gremlin,在访问this网站时,我偶然发现了gremlin step。它的输出与limit()相同,这让我想知道两者之间的区别是什么。我找不到关于这件事的任何澄清。谢谢!
发布于 2019-07-03 22:29:31
不幸的是,这有点令人困惑。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环境进行编程,那么很明显,您将无法使用take()和其他类似的函数。
发布于 2019-07-03 22:39:43
应该使用limit()步骤,从TinkerPop 3.4开始,它是迭代Traversal和检索第一个n元素的规范方法。
我不记得在撰写本文时为什么Traversal实例上有take()。对我来说,这听起来有点奇怪;这可能是Iterator (或类似的)接口泄漏,但如果维护人员读到这个问题,我会让他们对此发表评论。
你和limit()在一起会很安全的。
https://stackoverflow.com/questions/56862896
复制相似问题