2017-07-26 41 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查詢的結果輸出到程序中,以便與他們一起完成任務,並且目前看不到這種方法,這很容易 –

相關問題