溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DolphinDB模塊的復用教程

發(fā)布時間:2021-07-12 14:26:29 來源:億速云 閱讀:133 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“DolphinDB模塊的復用教程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“DolphinDB模塊的復用教程”吧!

1. Module(模塊)介紹

在DolphinDB中,模塊是指只包含函數(shù)定義的代碼包。它具有以下特點:

  • 以.dos作為模塊文件的后綴,dos是"dolphindb script"的縮寫

  • 模塊文件保存在DolphinDB節(jié)點的 [home]/modules目錄下

  • 模塊文件第一行以聲明模塊語句module moduleName開頭

  • 模塊文件內(nèi)容僅包含函數(shù)定義


2. 定義模塊

2.1 創(chuàng)建模塊目錄

默認情況下,所有的模塊定義在[home]/modules目錄下,[home]由系統(tǒng)配置參數(shù)home決定,可以通過 getHomeDir() 函數(shù)獲取。比如DolphinDB節(jié)點的home目錄為:

/root/DolphinDB/server

那么我們需要在該目錄下創(chuàng)建modules子目錄來保存模塊文件,最終模塊目錄為:

/home/root/DolphinDB/server/modules


2.2 創(chuàng)建模塊文件

在modules目錄下創(chuàng)建以.dos為后綴的模塊文件,比如FileLog.dos。模塊文件的第一行必須是模塊聲明語句。模塊聲明語句的語法如下:

module moduleName

moduleName必須與模塊文件的名稱一致,比如在FileLog.dos中聲明模塊:

module FileLog

聲明模塊后,我們可以開始編寫模塊代碼。例如,F(xiàn)ileLog.dos的內(nèi)容如下:

module FileLog
//向指定日志文件寫入日志
def appendLog(filePath, logText){
f = file(filePath,"a+")
f.writeLine(string(now()) + " : " + logText)
f.close()
}

在模塊文件中,僅允許封裝函數(shù)定義,其他非函數(shù)定義代碼將被忽略。


3. 導入模塊

在DolphinDB中,使用use關鍵字來導入一個模塊。注意,use關鍵字導入的模塊是會話隔離的,僅對當前會話有效。導入模塊后,我們可以通過以下兩種方式來使用模塊內(nèi)的自定義函數(shù):

(1)直接使用模塊中的函數(shù):

use FileLog
appendLog("mylog.txt", "test my log")

(2)通過完整路徑來調(diào)用模塊中的函數(shù):

use FileLog
FileLog::appendLog("mylog.txt", "test my log")


4. 規(guī)劃模塊

DolphinDB引入了命名空間的概念,支持對模塊進行分類和規(guī)劃。


4.1 聲明模塊命名空間

如果我們需要對模塊進行分類,可以通過多級路徑為規(guī)劃模塊的命名空間。例如,現(xiàn)有兩個模塊FileLog和DateUtil,它們的存放路徑分別為modules/system/log/FileLog.dos和modules/system/temperal/DateUtil.dos,那么這兩個模塊相應的聲明語句如下:

  • modules/system/log/FileLog.dos

module system::log::FileLog
  • modules/system/temperal/DateUtil.dos

module system::temperal::DateUtil


4.2 調(diào)用命名空間模塊

我們可以在use關鍵字后加完整路徑來導入命名空間下的模塊。例如,導入FileLog模塊:

use system::log::FileLog
//全路徑調(diào)用
system::log::FileLog::appendLog("mylog.txt", "test my log")
//直接調(diào)用已導入模塊中的函數(shù)
appendLog("mylog.txt", "test my log")


5. GUI中遠程調(diào)試模塊

當工作機和DolphinDB服務器不是同一臺機器時,我們在工作機上編輯的模塊代碼,不能直接在遠程服務器的DolphinDB上通過use導入,需要先將模塊文件上傳到[home]/modules的對應目錄,才能通過use調(diào)用模塊。http://www.changhai120.com/

DolphinDB GUI從0.99.2版本開始提供了遠程同步模塊的功能,具體用法如下圖所示:

DolphinDB模塊的復用教程

此操作會將Modules目錄下的所有文件和子目錄同步到GUI連接的DolphinDB節(jié)點的[home]/modules目錄下,同步完成后,就可以在Server上直接執(zhí)行use代碼導入模塊。


6. 注意事項

6.1 同名函數(shù)定義規(guī)則

不同模塊可以定義相同名字的函數(shù)。如果使用全路徑調(diào)用函數(shù),DolphinDB可以通過模塊命名空間來區(qū)分函數(shù)名。如果直接調(diào)用函數(shù):

  • 如果已導入的模塊中只有一個模塊包含該函數(shù),DolphinDB會調(diào)用該模塊的函數(shù)。

  • 如果已導入的模塊中有多個模塊包含該函數(shù),DolphinDB解析腳本時會以下拋出異常:

Modules [Module1] and [Module2] contain function [functionName]. Please use module name to qualify the function.
  • 如果已導入模塊中與自定義函數(shù)重名,系統(tǒng)會默認使用模塊中的函數(shù)。如果要調(diào)用自定義函數(shù),需要聲明命名空間。自定義函數(shù)和內(nèi)置函數(shù)的默認命名空間為根目錄,用兩個冒號表示。比如:

//定義模塊
module sys
def myfunc(){
 return 3
}

//自定義函數(shù)
login("admin","123456")
def myfunc(){
 return 1
}
addFunctionView(myfunc)

//調(diào)用
use sys
sys::myfunc() //調(diào)用模塊的函數(shù)
myfunc() //調(diào)用模塊的函數(shù)
::myfunc() //調(diào)用自定義函數(shù)
  • 如果已導入的模塊中不包含該函數(shù),DolphinDB會在系統(tǒng)內(nèi)置函數(shù)中搜索該函數(shù)。如果內(nèi)置函數(shù)中也沒有該函數(shù),將拋出函數(shù)為定義的異常。

6.2 刷新模塊定義

在開發(fā)階段調(diào)試模塊代碼時,開發(fā)人員需要反復修改模塊代碼并刷新定義,此時可以重新打開模塊文件并全選執(zhí)行模塊代碼即可,這種方法僅對當前會話有效。


6.3 模塊間互相調(diào)用

模塊之間可以單向引用,比如模塊a 引用 b , b 引用 c。模塊之間不支持交叉引用,比如模塊a 引用 b, 模塊b又引用a。

到此,相信大家對“DolphinDB模塊的復用教程”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI