6 Lua require模組與包

2021-08-18 07:46:39 字數 2763 閱讀 9336

模組類似於乙個封裝庫,從 lua 5.1 開始,lua 加入了標準的模組管理機制,可以把一些公用的**放在乙個檔案裡,以 api 介面的形式在其他地方呼叫,有利於**的重用和降低**耦合度。

lua 的模組是由變數、函式等已知元素組成的 table,因此建立乙個模組很簡單,就是建立乙個 table,然後把需要匯出的常量、函式放入其中,最後返回這個 table 就行。以下為建立自定義模組 module.lua,檔案**格式如下:

-- 定義乙個名為 module 的模組

module = {}

-- 定義乙個常量

module.constant = "這是乙個常量"

-- 定義乙個函式

function module.func1()

io.write("這是乙個公有函式!\n")

end

local function func2()

print("這是乙個私有函式!")

end

function module.func3()

func2()

end

return module

lua提供了乙個名為require的函式用來載入模組。要載入乙個模組,只需要簡單地呼叫就可以了。例如:

require("《模組名》")
或者

require "《模組名》"
執行 require 後會返回乙個由模組常量或函式組成的 table,並且還會定義乙個包含該 table 的全域性變數。

require("module")

print(module.constant)

module.func3()

以上**執行結果為:

這是乙個常量

這是乙個私有函式!

--1:

第乙個**是有

lua虛擬機器第乙個解釋執行的

lua檔案;

--2:

第乙個lua

檔案可以去包含和匯入其他的

lua檔案;

使用require

關鍵字來匯入其他

lua

--3: require

的時候就會裝載

lua檔案,並執行

lua**;

require「./test」 //

不用檔案的字尾名;

require 「

資料夾/

lua檔名」;

require 「

資料夾.

lua檔名」;

--4:

lua**中的

return  語句:

require 「

lua**

」 執行的時候如果有

return 語句,

那麼require

就返回return

的物件;

--5:

lua匯出函式:

將lua

**要到處的函式,做成乙個表,把這個表返回出去;

--6:

如果在其他的地方使用又要裝載一次;

--7:

如果require

過了的lua

**,直接返回返回值

,不再裝載**並執行

;--1:

預設情況下

lua**編寫的函式是不能被外部識別的;

--2:

包: module(

包名,

package.seeall)

--3:

外部require包名

require 「包名」

--4:

全域性require

模組後,其他的

lua檔案無需再去

require了,

方便使用

;lua和c是很容易結合的,使用 c 為 lua 寫包。

與lua中寫包不同,c包在使用以前必須首先載入並連線,在大多數系統中最容易的實現方式是通過動態連線庫機制。

lua在乙個叫loadlib的函式內提供了所有的動態連線的功能。這個函式有兩個引數:庫的絕對路徑和初始化函式。所以典型的呼叫的例子如下:

local path = "/usr/local/lua/lib/libluasocket.so"

local f = loadlib(path, "luaopen_socket")

loadlib 函式載入指定的庫並且連線到 lua,然而它並不開啟庫(也就是說沒有呼叫初始化函式),反之他返回初始化函式作為 lua 的乙個函式,這樣我們就可以直接在lua中呼叫他。

如果載入動態庫或者查詢初始化函式時出錯,loadlib 將返回 nil 和錯誤資訊。我們可以修改前面一段**,使其檢測錯誤然後呼叫初始化函式:

local path = "/usr/local/lua/lib/libluasocket.so"

-- 或者 path = "c:\\windows\\luasocket.dll",這是 window 平台下

local f = assert(loadlib(path, "luaopen_socket"))

f()  -- 真正開啟庫

一般情況下我們期望二進位制的發布庫包含乙個與前面**段相似的 stub 檔案,安裝二進位制庫的時候可以隨便放在某個目錄,只需要修改 stub 檔案對應二進位制庫的實際路徑即可。

將 stub 檔案所在的目錄加入到 lua_path,這樣設定後就可以使用 require 函式載入 c 庫了。

python 基礎 6 模組與包

參考 部落格教學 什麼是模組?模組是一些列功能的集合體 常見的模組形式 自定義模式 第三方模組 內建模組 1 乙個module.py就是乙個模組,檔名是module.py,而模組名是module 2 把一系列模組組織到一起的資料夾 注 資料夾下有乙個 init py檔案,該資料夾稱之為包 3 已被編...

python模組與包

路徑修改 命令列怎麼檢視路徑,修改路徑 列印當前搜尋路徑 import sys sys.path sys.path import os os.getcwd os.chdir c www 模組實現構建模組的初衷就是將一些同類的東西進行打包,以免汙染全域性空間,在python的模組裡,對需要隱藏的屬性和...

python 模組與包

模組與包 1.什麼是模組 在 python 中,乙個.py檔案就稱之為乙個模組 module 模組的優點 大大提高了 的可維護性 編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用 2.匯入模組的幾種方式 4.模組的分類 1 內建模組 os,sys,dnspython,socket,tim...