在軟件團隊開發項目中,要提高開發效率和質量,代碼必然要進行封裝和重用。在使用DolphinDB的腳本進行開發時,可使用module和use方法,來聲明和使用可重用模塊。服務器
在DolphinDB中,模塊是指只包含函數定義的代碼包。它具備如下特色:app
默認狀況下,全部的模塊定義在[home]/modules目錄下,[home]由系統配置參數home決定,能夠經過 getHomeDir() 函數獲取。好比DolphinDB節點的home目錄爲:ide
/root/DolphinDB/server
那麼咱們須要在該目錄下建立modules子目錄來保存模塊文件,最終模塊目錄爲:函數
/home/root/DolphinDB/server/modules
2.2 建立模塊文件spa
在modules目錄下建立以.dos爲後綴的模塊文件,好比FileLog.dos。模塊文件的第一行必須是模塊聲明語句。模塊聲明語句的語法以下:調試
module moduleName
moduleName必須與模塊文件的名稱一致,好比在FileLog.dos中聲明模塊:日誌
module FileLog
聲明模塊後,咱們能夠開始編寫模塊代碼。例如,FileLog.dos的內容以下:orm
module FileLog //向指定日誌文件寫入日誌 def appendLog(filePath, logText){ f = file(filePath,"a+") f.writeLine(string(now()) + " : " + logText) f.close() }
在模塊文件中,僅容許封裝函數定義,其餘非函數定義代碼將被忽略。server
在DolphinDB中,使用use關鍵字來導入一個模塊。注意,use關鍵字導入的模塊是會話隔離的,僅對當前會話有效。導入模塊後,咱們能夠經過如下兩種方式來使用模塊內的自定義函數:blog
(1)直接使用模塊中的函數:
use FileLog appendLog("mylog.txt", "test my log")
(2)經過完整路徑來調用模塊中的函數:
use FileLog FileLog::appendLog("mylog.txt", "test my log")
DolphinDB引入了命名空間的概念,支持對模塊進行分類和規劃。
若是咱們須要對模塊進行分類,能夠經過多級路徑爲規劃模塊的命名空間。例如,現有兩個模塊FileLog和DateUtil,它們的存放路徑分別爲modules/system/log/FileLog.dos和modules/system/temperal/DateUtil.dos,那麼這兩個模塊相應的聲明語句以下:
module system::log::FileLog
module system::temperal::DateUtil
4.2 調用命名空間模塊
咱們能夠在use關鍵字後加完整路徑來導入命名空間下的模塊。例如,導入FileLog模塊:
use system::log::FileLog //全路徑調用 system::log::FileLog::appendLog("mylog.txt", "test my log") //直接調用已導入模塊中的函數 appendLog("mylog.txt", "test my log")
當工做機和DolphinDB服務器不是同一臺機器時,咱們在工做機上編輯的模塊代碼,不能直接在遠程服務器的DolphinDB上經過use導入,須要先將模塊文件上傳到[home]/modules的對應目錄,才能經過use調用模塊。
DolphinDB GUI從0.99.2版本開始提供了遠程同步模塊的功能,具體用法以下圖所示:
此操做會將Modules目錄下的全部文件和子目錄同步到GUI鏈接的DolphinDB節點的[home]/modules目錄下,同步完成後,就能夠在Server上直接執行use代碼導入模塊。
不一樣模塊能夠定義相同名字的函數。若是使用全路徑調用函數,DolphinDB能夠經過模塊命名空間來區分函數名。若是直接調用函數:
Modules [Module1] and [Module2] contain function [functionName]. Please use module name to qualify the function.
//定義模塊 module sys def myfunc(){ return 3 } //自定義函數 login("admin","123456") def myfunc(){ return 1 } addFunctionView(myfunc) //調用 use sys sys::myfunc() //調用模塊的函數 myfunc() //調用模塊的函數 ::myfunc() //調用自定義函數
在開發階段調試模塊代碼時,開發人員須要反覆修改模塊代碼並刷新定義,此時能夠從新打開模塊文件並全選執行模塊代碼便可,這種方法僅對當前會話有效。
6.3 模塊間互相調用
模塊之間能夠單向引用,好比模塊a 引用 b , b 引用 c。模塊之間不支持交叉引用,好比模塊a 引用 b, 模塊b又引用a。