Groovy 在gremlin控制台上,为什么要断言';等式';内部返回false';是';而直接比较返回true?
在gremlin版本3.4.0上,步骤Groovy 在gremlin控制台上,为什么要断言';等式';内部返回false';是';而直接比较返回true?,groovy,gremlin,Groovy,Gremlin,在gremlin版本3.4.0上,步骤为,谓词未按预期工作 如果我做了下面的事情,它会给我一个真实的答案 gremlin>3.is(3) ==>true gremlin>[3].getAt(0).is(3) ==>true 而与使用谓词的相同比较不起作用,并且返回false gremlin>3.is(eq(3)) ==>false gremlin>[3].getAt(0).is(eq(3)) ==>false 确切地说,我希望检查节点属性值的长
为,谓词未按预期工作
如果我做了下面的事情,它会给我一个真实的答案
gremlin>3.is(3)
==>true
gremlin>[3].getAt(0).is(3)
==>true
而与使用谓词的相同比较不起作用,并且返回false
gremlin>3.is(eq(3))
==>false
gremlin>[3].getAt(0).is(eq(3))
==>false
确切地说,我希望检查节点属性值的长度,并基于最大长度进行验证
gremlin>g.V(0).values('name').next().length().is(lte(20))
==>false
如果名称等于test\u name
(长度为9),则上述代码始终返回false。而如果进行直接比较(如下图所示),则返回true
gremlin>g.V(0).values('name').next().length().is(9)
==>true
我做错了什么?你把Groovy和Gremlin混为一谈了。执行此操作时:
gremlin>3.is(3)
==>true
gremlin>[3].getAt(0).is(3)
==>true
您没有使用Gremlin,因此这不是is()
步骤。在这种情况下,您正在使用Groovy的is()
方法执行一个测试。这进一步解释了当你在问题中进一步深入时的结果,如:
gremlin>g.V(0).values('name').next().length().is(lte(20))
==>false
因为一旦你做了next()
你就不再做小精灵了。下面没有任何表示Gremlin步骤的代码,它只是Groovy代码。调用String.length()
方法,然后调用Groovyis()
操作符,并将length()
返回的int
与lte(20)
进行比较,后者是P
的一个实例,因此:
gremlin> "xyz".length().is(lte(20))
==>false
如果您想使用Gremlin检查字符串的长度,那么除了使用lambda之外,我不确定是否还有其他方法可以做到:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().values('name').filter{it.get().length()<=4}
==>lop
==>josh
gremlin>g=TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[顶点:6条边:6],标准]
gremlin>g.V().values('name').filter{it.get().length()lop
=>乔希
谢谢你,我非常感谢你的澄清。这对我很有用。