gpt4 book ai didi

titan - 在TinkerPop中next()意味着什么

转载 作者:行者123 更新时间:2023-12-04 10:48:51 27 4
gpt4 key购买 nike

我目前正在阅读TinkerPop3 Documentation

我感到困惑的是,我找不到关于next()的任何解释。

例如,w/next()或w/o next()返回相同的文字

gremlin> g.V().has('name', 'marko')
==>v[1]
gremlin> g.V().has('name', 'marko').next()
==>v[1]

但是,类名彼此不同。
gremlin> g.V().has('name', 'marko').getClass()
==>class org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal
gremlin> g.V().has('name', 'marko').next().getClass()
==>class org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex

没有“next()”,分配的变量将没有值。
gremlin> marko = g.V().has('name', 'marko')
==>v[1]
gremlin> marko

即使使用 clockWithResult(),输出也完全不同。
gremlin> clockWithResult(1){g.V().both().barrier().both().barrier().both().barrier().count().next()}
==>1.079524
==>72
gremlin> clockWithResult(1){g.V().both().barrier().both().barrier().both().barrier().count()}
==>0.11863599999999999
==>[GraphStep([],vertex), VertexStep(BOTH,vertex), NoOpBarrierStep(2147483647), VertexStep(BOTH,vertex), NoOpBarrierStep(2147483647), VertexStep(BOTH,vertex), NoOpBarrierStep(2147483647), CountGlobalStep]

或这个例子:
gremlin> g.V(1).out('knows').values('name').fold()
==>[vadas, josh]
gremlin> g.V(1).out('knows').values('name').fold().next()
==>vadas
==>josh

在手册中,还有许多其他示例使我感到困惑。

我希望马可和他的 friend 能帮助我。

最佳答案

简短的答案是,Gremlin控制台会自动为您迭代结果。

x = g.V().has('name', 'marko')

在上面的示例中, x将是 Traversal实例,它是 Iterator的类型。当控制台遇到 Iterator时,它将自动展开它,以便您可以看到结果。在这种情况下:
x = g.V().has('name', 'marko').next()

添加 next()只是表示您要调用 Iterator.next()-换句话说,您想从 Iterator中获取第一项。因此,在上述情况下, x将是 Vertex

对于这种情况:
gremlin> marko = g.V().has('name', 'marko')
==>v[1]
gremlin> marko

您现在知道 markoIterator,因此当您再次对其求值时,控制台将尝试对其进行迭代。当然,控制台已经在上一行中对其进行了迭代,因此当它再次尝试进行迭代时,没有其他要迭代的内容。这是一个使发生的事情更加明显的示例:
gremlin> x = g.V();null
==>null
gremlin> x.next()
==>v[1]
gremlin> x.next()
==>v[2]
gremlin> x
==>v[3]
==>v[4]
==>v[5]
==>v[6]

请注意,在第一行上使用了 ;null,这会阻止控制台迭代 x。为什么?因为我的脚本返回 null而不是 x

现在应该清楚您的 clock示例在做什么……第一行调用 next()来测量遍历的执行,第二行测量 Traversal构造的执行。在这种情况下,为什么需要调用 next()?因为 Traversal在闭包内部-请记住,控制台仅迭代函数的返回值,而不是脚本中的每个 Iterator

最后:
gremlin> g.V(1).out('knows').values('name').fold()
==>[vadas, josh]
gremlin> g.V(1).out('knows').values('name').fold().next()
==>vadas
==>josh

希望我在上面讨论的所有其他内容都可以让您了解 next()为何会产生这种行为,但是以防万一,这实际上是控制台在做的事情:
gremlin> x = g.V(1).out('knows').values('name').fold();null
==>null
gremlin> y = x.next();null
==>null
gremlin> y
==>vadas
==>josh

关于titan - 在TinkerPop中next()意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34016744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com