可重用的遍历组件并不总是与gremlin一起工作

可重用的遍历组件并不总是与gremlin一起工作,gremlin,gremlin-server,gremlinpython,Gremlin,Gremlin Server,Gremlinpython,我试图通过将遍历组件放入函数中,使用gremlinpython为遍历创建可重用组件,但遇到了一些遍历组件无法正常工作的问题 作为安装程序,我正在使用docker容器运行gremlin server,配置文件从 我的测试python代码如下所示: from gremlin_python.process.anonymous_traversal import traversal from gremlin_python.process.graph_traversal import __ from gre

我试图通过将遍历组件放入函数中,使用gremlinpython为遍历创建可重用组件,但遇到了一些遍历组件无法正常工作的问题

作为安装程序,我正在使用docker容器运行gremlin server,配置文件从

我的测试python代码如下所示:

from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.process.graph_traversal import __
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

def connect_gremlin(endpoint='ws://localhost:8182/gremlin'):
    return traversal().withRemote(DriverRemoteConnection(endpoint,'g'))

def n():
    return __.values('name')

def r():
    return __.range(2,4)

g = connect_gremlin()

# works as expected
g.V().map(n()).toList()

# returns an empty list
g.V().map(n()).filter(r()).toList()

# but using range step directly works as expected
g.V().map(n()).range(2,4).toList()

我可以成功地将
步骤移动到函数中,但当我尝试对
范围
步骤执行相同操作时,它会返回一个空列表,而不是第2到第4项。有人知道我做错了什么吗?

映射步骤旨在将每个遍历器的状态映射到新状态。在单个遍历器的上下文中,从零以外的任何位置开始的
范围
不会达到预期效果

下面是一些使用Python的示例:

>>> g.V().map(__.range(0,1)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]

>>> g.V().map(__.range(0,2)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]

>>> g.V().map(__.range(1,2)).limit(5).toList()
[]
这就是为什么
步骤在
映射
步骤中工作,而
范围
不工作的原因


与其使用
map
步骤注入代码,为什么不只是增量地添加到遍历中,然后在完成时迭代它呢?

我想如果你一定要以这种方式使用
map()
,那么你必须
fold()
然后
range(local)
比如:
g.V().fold().map(range(local,2,4))
但这还不如将整个流实现为一个
列表
来对其进行切片。我的实际使用可能会更复杂一些,因为我希望有几个遍历步骤,我希望“混合”到更大的遍历中。我在遍历中使用的一种常见模式类似于
order().by(A).range(x,y)
,因此我希望有一种方法将它们封装到函数中。
>>> g.V().map(__.range(0,1)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]

>>> g.V().map(__.range(0,2)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]

>>> g.V().map(__.range(1,2)).limit(5).toList()
[]