lua檔案函式呼叫

2021-07-10 13:44:15 字數 2484 閱讀 4988

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...