lua指令碼是面向過程的語言,一般檔案結構:
data.lua
local _idata = 0
local _arrdata = {}
--local表示區域性變數或函式 只要沒有local宣告就是全域性的
--iopen是全域性變數
--optdata是私有函式
local
function
optdata
() iopen = 10
_idata = _idata + iopen
endfunction
optarrdata
(key, value)
_arrdata[key] = value
endfunction
trace
() --因為是面向過程 所以 optdata 函式需要寫在呼叫者 trace 之前
optdata()
optarrdata(1, 10)
print(_arrdata[1], _idata)
end
然後我們希望在其他檔案中呼叫data.lua
一、模組方式
所以我們的data.lua檔案將稍作調整
我們定義data.lua在工作目錄下./data/data.lua
--在檔案的頭部新增 module 定義乙個不重複的模組名 一般使用檔案路徑
module("data.data",package.seeall)
local _idata = 0
local _arrdata = {}
省略......
定義好模組之後 我們在test.lua中呼叫
test.lua
function
test
() --匯入包
require("data.data")
--用包呼叫函式
data.data:trace()
--輸出:10 11
end
值得注意的也可以選擇 . 呼叫
區別在於 . 呼叫的第乙個引數會講自身作為table傳遞進去 當呼叫的是帶引數的函式時尤其注意
test.lua
function
test()
--匯入包
require "data.data"
--用包呼叫函式
data.data:optarrdata
(1, 10)
--相當於 _arrdata[1] = 10
data.data.optarrdata
(1, 20)
--這裡卻是 第乙個引數接收的是 data.lua 自身的表
--相當於 _arrdata[data] = 1 結果可想而知
end
一、表結構方式
因為lua最主要的結構是 table 也為了避免面向結構帶來的優先順序困擾所以可以直接將乙個lua檔案就作為乙個表來呼叫
注意變化
data.lua
--宣告一張表
local data = {}
local _idata = 0
local _arrdata = {}
--這個時候即使呼叫者在被呼叫者之前宣告也沒關係 因為表資料被完全讀取
function
data:trace
() optdata()
optarrdata(1, 10)
print(_arrdata[1], _idata)
end--將函式作為表鍵值存下來 這時候不能再使用 local 描述符
function
data:optdata
() iopen = 10
_idata = _idata + iopen
endfunction
data:optarrdata
(key, value)
_arrdata[key] = value
end--注意最後將表返回回去
return data
呼叫:
test.lua
function
test
() --直接拿到物件 然後呼叫函式
local odata = require("data.data")
odata:trace()
--輸出:10 11
end
用這種方式將可以實現 物件導向的類操作 以後接著聊 呼叫Lua函式
翻譯自http gamedevgeek.com tutorials calling lua functions 呼叫lua函式 這是lua指令碼語言教程系列之二。在第一篇中,我們學習了在windows和linux下編譯並執行 hello,world 程式。如果你沒有看過,請參考lua入門一文。這篇文...
lua呼叫c函式
最近在進入lua程式設計的狀態,一度令我困惑的是,lua提供的功能少的可憐,跟自備電池的python相比,可說是簡陋了。連table的列印,都需要自己實現,也因此有了一打的第三方方案。後來我想明白了,以lua和c如此緊密的關係,只需要建立lua的binding,那麼豐富而效能強大的c庫資源完全可以為...
lua呼叫c函式
lua可以呼叫c函式的能力將極大的提高lua的可擴充套件性和可用性。對於有些和作業系統相關的功能,或者是對效率要求較高的模組,我們完全可以通過c函式來實現,之後再通過lua呼叫指定的c函式。對於那些可被lua呼叫的c函式而言,其介面必須遵循lua要求的形式,即 typedef int lua cfu...