我是靠谱客的博主 甜美乌冬面,最近开发中收集的这篇文章主要介绍<6>Lua require模块与包,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

模块类似于一个封装库,从 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

1.require 函数

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代码,直接返回返回值,不再装载代码并执行;

2.modulepackage

--1: 默认情况下lua代码编写的函数是不能被外部识别的;

--2: : module(包名, package.seeall)

--3: 外部require 包名

    require “包名

--4: 全局require模块后,其他的lua文件无需再去require,方便使用;

3.C 包

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 库了。

 

最后

以上就是甜美乌冬面为你收集整理的<6>Lua require模块与包的全部内容,希望文章能够帮你解决<6>Lua require模块与包所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部