2017-07-26 109 views
1

我正在学习使用Gremlin,并刚刚开始使用命令行制作基本图形。我已经了解到,我可以把它放到一个脚本中,这基本上只是一堆groovy(我也刚刚熟悉)。我运行下面的脚本,并且一旦脚本完成运行(除了所有关于所做的节点/边的正确消息),我就会得到`==> null',一切都很好。我做错了什么?为什么gremlin在我的脚本中输出“null”?

graph = TinkerGraph.open() 
g = graph.traversal() 
//The nodes 
curCharge = graph.addVertex(id, 1, label, "Topic", "name","Current") 
pow = graph.addVertex(id, 2, label, "Topic", "name","power") 
powFromNRG = graph.addVertex(id, 3, label, "Topic", "name","powerFromNRG") 
NRGFromPower = graph.addVertex(id, 4, label, "Topic", "name","NRGFromPower") 
powFromVI = graph.addVertex(id,5,label,"Topic","name","powerFromIV") 
powInRes = graph.addVertex(id,6,label,"Topic","name","powerInResistors") 
passSign = graph.addVertex(id,7,label,"Topic","name","passiveSignPower") 
ohmLaw = graph.addVertex(id,8,label,"Topic","name","ohmsLaw") 

//the pre-requisite edges 
pow.addEdge("prereq",powFromNRG) 
pow.addEdge("prereq",NRGFromPower) 
pow.addEdge("prereq",powFromVI) 
powFromVI.addEdge("prereq",passSign) 
passSign.addEdge("prereq",powInRes) 
ohmLaw.addEdge("prereq",powInRes) 

//just some test queries 
nL = g.V().has("name","passiveSignPower").inE("prereq").outV() 
if(nL != null) 
    println "Hey!" 

回答

2

Gremlin控制台返回执行的每一行的结果。在你的情况下,执行的最后一行是println "Hey!"这是一个void方法,所以它返回null

这里,你所看到的结果:

gremlin> if(nL != null) 
......1>  println "Hey!" 
Hey! 
==>null 

你可以看到Hey!被打印到屏幕,但null是结果。

如果你改变你的脚本简单地返回字符串Hey!,你可以,避免受到null结果,并获得字符串结果,而不是:

gremlin> if(nL != null) 
......1>  "Hey!" 
==>Hey! 

结帐的Gremlin Console Tutorial有关自动重复一些更多的讨论。

+0

谢谢!我玩过这些教程,但一定错过了那部分。我发现Gremlin的文档有两种类型 - 更简单,教程内容和API本身。有没有另外一个参考文件可以更详细地解释事情,而不需要rtfm? –

+1

有趣的问题。我知道参考文档很大,教程可能有点难找。您在填补文档空白方面想到了什么?在gremlin-users邮件列表中进行这种对话可能会更好,而不是SO评论。 –

+0

好主意,我会检查邮件列表。我主要对将Gremlin包含在Java项目中感兴趣。我猜,我也会在Groovy中做到这一点。最终,我需要能够将我的Gremlin查询的结果输出到程序中,以便与他们一起完成任务,并且目前看不到这种方法,这很容易 –

相关问题