lua脚本是面向过程的语言,一般文件结构:
Data.lua
local _iData = 0 local _arrData = {} --local表示局部变量或函数 只要没有local声明就是全局的 --iOpen是全局变量 --OptData是私有函数 local function OptData() iOpen = 10 _iData = _iData + iOpen end function OptArrData(key, value) _arrData[key] = value end function 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
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文件就作为一个表来调用
--声明一张表 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 end function Data:OptArrData(key, value) _arrData[key] = value end --注意最后将表返回回去 return Data
function Test() --直接拿到对象 然后调用函数 local oData = require("data.Data") oData:Trace() --输出:10 11 end
用这种方式将可以实现 面向对象的类操作 以后接着聊
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220581.html原文链接:https://javaforall.net
