導出
Nolang 使用 @ 關鍵字在包的根目錄 lib.no 文件中聲明導出項,外部包通過 # 導入時只能訪問這些已導出的符號。
語法
@ path.func [alias]
path— 模塊路徑(相對於包根目錄,以/開頭,不帶.no副檔名)func— 要導出的函數/常量/枚舉名alias— 可選別名,外部導入時使用的名稱
規則
- 導出語句只能寫在包根目錄的
lib.no文件中 - 一行一個導出項
- 導出項只能是函數、常量、枚舉等最終符號
- 被導出函數引用的結構體、枚舉等類型會自動導出,無需手動聲明
- 如果導出的函數在模塊中不存在,LSP 會提示錯誤
範例
; lib.no - 包根目錄導出文件
@ /src/utils.greet a
@ /src/utils.hello b
@ /src/math.pi
; src/utils.no
; 定義被導出的函數
greet = (name str) {
print('Hello, ' - name)
}
hello = () {
print('Hi')
}
導入已導出的符號
外部包通過 # 導入時,只能訪問 lib.no 中聲明的導出項:
; 导入別名 a(對應 package-name.utils.greet)
# package-name.utils.greet a
; 或者直接使用函數名
# package-name.utils.greet
LSP 支持
- 跳轉定義:在
lib.no中點擊導出的函數名或別名,跳轉到對應模塊文件中的定義位置 - 自動補全:輸入
@和路徑時自動提示可選的文件路徑和函數名 - 錯誤提示:導出的函數在模塊中不存在時顯示錯誤診斷