Lua 中提供了模块的概念,模块类似一个封装库或者 C++ 中的一个类,可以将公用的部分提到一个文件中,以 API 的形式供其他 lua 文件调用。

Lua 中的模块其实就是包含变量、函数等已知元素组成的 table, 本质上是一个 table。

一、模块的声明

创建一个名称为 LearnModule.lua 的文件,并在此文件中实现下列代码:

-- 定义一个名为ModuleT的模块,模块的本质就是一个table,内部包含变量和函数等
ModuleT = {} -- 定义一个变量
ModuleT.constant = '这是一个常量' -- 定义一个
function ModuleT.Fun1( )
print('这是一个公有函数')
end local function Fun2()
print('这是一个私有函数')
end function ModuleT.Fun3( )
Fun2()
end return ModuleT

二、在其他 lua 文件中使用 ModuleT 模块

1. 首先创建另外一个 lua 文件,例如命名为 TestModule.lua。

2. 通过 require 函数加载包含 ModuleT 模块的文件,代码如下:

require("LearnModule")
print(ModuleT.constant)
print(ModuleT.Fun1)

3. 打印结果为:

----learn to how to make module-----
这是一个常量
function: 0x7fa350604660

三、require 函数使用说明

  • require 函数的使用
-- name 表示定义的Module 所在的 lua 文件
require("<name>")
  • 找不到 name 对应的文件

第一次使用 require 函数加载指定模块的文件时,可能提示找不到对应的文件,原因在于 Lua 有一个默认的查找路径。通过 package.path 和 package.cpath 查找路径。

-- 打印出当前默认搜索的动态库(so)路径
print(package.cpath) -- 打印当前默认的用于搜索.lua文件的路径
print(package.path)
package.cpath:代表默认的 so 库的查找路径。
package.path:代表默认的 lua 文件的查找路径。

如果通过 require 函数加载指定的模块文件时,提示找不到对应的文件,则通过设置 package.path 路径即可。具体代码如下:
package.path = package.path..";/Users/momo/Documents/workspace_lua/?.lua"
print(package.path)

上述代码表示将 package.path 的路径追加上 「/Users/momo/Documents/workspace_lua/」 路径下的所有 lua 文件,读者可根据自己的实际情况添加对应的路径。

以上亲测有效。

Lua学习之加载其他lua文件的更多相关文章

  1. iOS 学习 - 23 加载本地 txt 文件, NSMutableParagraphStyle 段落格式,缩放动画,字体间距

    思路: 1.new 一个 Empty 后缀为 .txt 文件,内容随笔拷贝一段 2.用 NSString 接收本地文件,再用一个标题拼接字符串 3.创建一个 NSMutableParagraphSty ...

  2. cocos2dx lua中异步加载网络图片,可用于显示微信头像

    最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...

  3. lua代码的加载

    lua代码的加载 Openresty是什么 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,通过把lua嵌入到Nginx中,使得我们可以用轻巧的lua语言进行nginx的 ...

  4. Lua模块的加载与内存释放

    今天早上听说一件事情让我觉得很诡异的事情:公司线上的一款游戏,加载一份配置资源后,内存涨了几十M,然后内存再也下不来了.因为好奇,所以要来了最大的一个配置文件(4.5M,去除空格与换行后的大小),进行 ...

  5. Lua 学习之基础篇七<Lua Module,Package介绍>

    Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require ...

  6. Lua 学习之基础篇五<Lua OS 库>

    lua os库提供了简单的跟操作系统有关的功能 1.os.clock() 返回程序所运行使用的时间 local nowTime = os.clock() print("now time is ...

  7. pygame加载中文名mp3文件出现error

    好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢,最近.下面来 ...

  8. 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)

    一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范.  1.AMD(Asy ...

  9. 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)

    文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...

随机推荐

  1. AssetBundle打包-----BuildPipeline的应用

    打包思路:确定要打包资源的路径.和打包的输出路径(一般为S路径),把存放资源的路径使用递归进行遍历,获取所有资源,文件类型的资源可以通过File拷贝或IO写到输出路径,其他资源的打包通过AssetBu ...

  2. cpp实验二

    1.函数重载编程练习 编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型 数据,调用测试. #include<iostream& ...

  3. freebsd 记录点

    问题一: FreeBSD修改python的默认版本 在/usr/local/bin目录下, mv python python.old ln -s pythonX.X  python in X.X wr ...

  4. REST SOAP Thrift 对比

    别人的REST SOAP Thrift对比: 单项分数越高越好 项目 REST SOAP Thrift Extensibility 5 3 1 Neutrality 2 4 3 Independenc ...

  5. ionic上拉加载组件 ion-infinite-scroll自动调用多次的问题

    参考文章地址:http://www.cnblogs.com/luleixia/p/6402418.html ionic 一个上拉刷新的组件 ion-infinite-scroll,如果页面未填充满页面 ...

  6. 枪弹辩驳(弹丸论破)即将登陆PC

    Spike Chunsoft在PSP上的经典推理游戏: 枪弹辩驳1(Danganronpa: Trigger Happy Havoc)即将登陆PC, PC党有福了. 不过我在PSVita上已经玩完了两 ...

  7. Python爬虫初学者学习笔记(带注释)

    一,安装编程工具并进入编程界面 首先去https://www.continuum.io/downloads/网站下载Anaconda工具并安装;打开cmd,输入jupyter notebook并回车( ...

  8. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  9. IDEA下调试和运行Hadoop程序例子

    准备 配置好JDK和Hadoop环境, 在IDEA中建立maven项目,建立后的目录结构为: 修改pom..xml引入相关支持: <?xml version="1.0" en ...

  10. 【springboot】之自动配置原理

    使用springboot开发web应用是很方便,只需要引入相对应的GAV就可以使用对应的功能,springboot默认会帮我们配置好一些常用配置.那么springboot是怎么做到的呢?这篇文章将一步 ...