Latest web development tutorials

paket modul Lua

Modul ini mirip dengan paket perpustakaan, mulai dari Lua 5.1, Lua menambahkan mekanisme manajemen modul standar, Anda dapat menaruh beberapa kode umum dalam satu file, dalam bentuk panggilan antarmuka API di tempat lain, mendukung penggunaan kembali kode dan mengurangi kode kopling.

Lua modul adalah tabel dari variabel, fungsi, dan elemen lain yang dikenal, sehingga menciptakan sebuah modul yang sangat sederhana, adalah untuk membuat tabel, maka kebutuhan untuk mengekspor konstanta, fungsi mana, akhirnya kembali ke meja di telepon. Berikut ini adalah menciptakan module.lua modul custom, Format file kode adalah sebagai berikut:

-- 文件名为 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

Dari uraian di atas, struktur modul adalah struktur tabel, sehingga Anda dapat memanggil meja sebagai unsur dalam operasi untuk beroperasi sebagai konstan dalam modul panggilan atau fungsi.

The func2 atas dideklarasikan sebagai variabel lokal memblokir, yang berarti fungsi swasta, dan karena itu tidak dapat diakses dari luar modul fungsi swasta harus dipanggil oleh fungsi publik modul.


membutuhkan fungsi

Lua menyediakan fungsi yang disebut membutuhkan digunakan untuk memuat modul. Untuk memuat modul, hanya menyebutnya. Sebagai contoh:

require("<模块名>")

atau

require "<模块名>"

Akan kembali setelah eksekusi memerlukan konstan atau fungsi dengan modul yang terdiri dari meja, dan akan menentukan variabel global yang berisi meja.

-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")
 
print(module.constant)
 
module.func3()

Kode di atas dijalankan sebagai akibat dari:

这是一个常量
这是一个私有函数!

Atau untuk memuat modul mendefinisikan variabel alias, panggilan mudah:

-- test_module2.lua 文件
-- module 模块为上文提到到 module.lua
-- 别名变量 m
local m = require("module")
 
print(m.constant)
 
m.func3()

Kode di atas dijalankan sebagai akibat dari:

这是一个常量
这是一个私有函数!

mekanisme pemuatan

Untuk modul kustom, tidak di mana direktori file akan lakukan, membutuhkan fungsi memiliki sendiri strategi path file loading, mencoba untuk memuat file modul dari Lua atau C program perpustakaan.

Memerlukan jalur pencarian file Lua disimpan dalam variabel package.path global, setelah sepatu Lua, nilai awal LUA_PATH dari variabel lingkungan untuk variabel lingkungan. Jika Anda tidak menemukan variabel lingkungan, jalan default didefinisikan oleh inisialisasi saat kompilasi.

Tentu saja, jika tidak ada LUA_PATH variabel lingkungan ini, Anda juga dapat menyesuaikan pengaturan, buka file .profile direktori home pengguna saat ini (tidak membuat, Anda juga dapat membuka file .bashrc), misalnya, "~ / lua /" jalan untuk bergabung lingkungan LUA_PATH variabel:

#LUA_PATH
export LUA_PATH="~/lua/?.lua;;"

Path file ";" dipisahkan oleh dua final ";;" singkatan baru ditambahkan ditambah jalur asli dari jalur default.

Selanjutnya, informasi parameter variabel lingkungan Anda untuk segera berlaku.

source ~/.profile

Kemudian nilai package.path diasumsikan adalah:

/Users/dengjoe/lua/?.lua;./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua

Jadi saat memanggil memerlukan ( "modul") akan mencoba untuk membuka direktori berkas berikut untuk mencari target.

/Users/dengjoe/lua/module.lua;
./module.lua
/usr/local/share/lua/5.1/module.lua
/usr/local/share/lua/5.1/module/init.lua
/usr/local/lib/lua/5.1/module.lua
/usr/local/lib/lua/5.1/module/init.lua

Jika mendekati file target akan dipanggil package.loadfile untuk memuat modul. Jika tidak, pergi ke C perpustakaan.

path pencarian file package.cpath diperoleh dari variabel global, dan variabel ini LUA_CPATH untuk variabel lingkungan awal.

Strategi pencarian dengan sama seperti di atas, tapi sekarang pencarian begitu diganti atau jenis file dll. Jika Anda menemukannya, maka akan membutuhkan oleh package.loadlib untuk memuatnya.


paket C

Lua dan C mudah digabungkan dengan menggunakan C untuk menulis Lua paket.

Tulis paket yang berbeda dan Lua, C paket sebelum digunakan pertama harus dimuat dan terhubung, di kebanyakan sistem adalah cara termudah untuk mencapai mekanisme dynamic link library.

Lua memberikan semua fungsi menghubungkan dinamis dalam fungsi yang disebut loadlib. Fungsi ini membutuhkan dua argumen: path absolut ke perpustakaan dan inisialisasi fungsi. Jadi contoh panggilan khas adalah:

local path = "/usr/local/lua/lib/libluasocket.so"
local f = loadlib(path, "luaopen_socket")

Fungsi loadlib beban perpustakaan tertentu dan terhubung dengan Lua, tetapi tidak membuka perpustakaan (yaitu tidak ada panggilan fungsi inisialisasi), kalau tidak, ia mengembalikan fungsi inisialisasi sebagai fungsi Lua, sehingga kita bisa memanggilnya langsung di Lua.

Jika terjadi kesalahan saat memuat fungsi perpustakaan dinamis atau inisialisasi lookup, loadlib mengembalikan nil dan pesan kesalahan. Kita dapat memodifikasi bagian sebelumnya kode untuk mendeteksi kesalahan dan kemudian memanggil fungsi inisialisasi:

local path = "/usr/local/lua/lib/libluasocket.so"
-- 或者 path = "C:\\windows\\luasocket.dll",这是 Window 平台下
local f = assert(loadlib(path, "luaopen_socket"))
f()  -- 真正打开库

Dalam keadaan normal kita harapkan rilis perpustakaan biner berisi potongan kode berkas stub serupa sebelumnya, binari instalasi dapat dengan mudah ditempatkan dalam sebuah direktori, Anda hanya perlu memodifikasi file biner perpustakaan rintisan sesuai dengan jalan yang sebenarnya.

Direktori dimana file tersebut ditambahkan ke LUA_PATH rintisan, pengaturan ini dapat digunakan setelah memuat library C fungsi membutuhkan.