Lua学习之加载其他lua文件

news/2024/6/29 11:48:31 标签: lua, c/c++
Lua学习之加载其他lua文件

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 文件,读者可根据自己的实际情况添加对应的路径。

 

以上亲测有效。

posted on 2018-10-28 23:38 bky2016 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/calence/p/9867968.html


http://www.niftyadmin.cn/n/683164.html

相关文章

5W1H分析法

5W1H分析法 5W1H分析法&#xff08;Five Ws and one H&#xff09;也称六何分析法 [编辑 ]什么是5W1H分析法&#xff1f; 5W1H分析法也称六何分析法 &#xff0c;是一种思考 方法&#xff0c;也可以说是一种创造 技法。是对选定的项目、工序 或操作&#xff0c;都要从原因&a…

BLE--地址类型

一、综述一个BLE设备&#xff0c;可以使用两种类型的地址&#xff08;一个BLE设备可同时具备两种地址&#xff09;&#xff1a;Public Device Address和Random Device Address。而Random Device Address又分为Static Device Address和Private Device Address两类。其中Private …

RN错误随笔 - Unable to resolve module 'AccessibilityInfo'

错误信息&#xff1a;.React Native 运行报错&#xff1a;Unable to resolve module AccessibilityInfo 可以看到在 异常的返回的JSON 结构中给出了推荐的解决方法 &#xff1a;This might be related to https://github.com/facebook/react-native/issues/4968\n To resolve t…

linux和性能相关的命令及系统性能诊断

author:skatetime:2011-03-09这是我总结的关于linux环境和性能相关的命令&#xff0c;以备查询内容&#xff1a; 一&#xff0e; 命令详解 二&#xff0e; 识别 cpu/io/ 内存 /network 瓶颈&#xff0c;及决方法啊 常用的…

Ubuntu 16.04下搭建samba服务器

一、Ubuntu下安装 sudo apt-get install samba sudo apt-get install smbclient 二、更改配置文件 sudo gedit /etc/samba/smb.conf 在最后添加如下信息&#xff1a; [share] comment Share Folder require password browseable yes path /home/carl/work/cm-h2 creat…

IEEE爬取摘要并翻译成中文

1 # -*- coding: utf-8 -*-2 """3 Created on Thu Oct 18 09:13:32 20184 5 author: Gawen6 7 实现爬取IEEE目标网页上该页所有论文的摘要8 并通过百度翻译api进行翻译9 并将链接与翻译后的摘要存到文本文档中10 其中百度的api的appid以及secertkey需要自己申请…

BLE软件基本框架介绍

BLE设备本身分为Host与Controller&#xff0c;并不是对应两个设备&#xff0c;而是一个设备的层次区分。如下图&#xff08;使用网络复制图片&#xff0c;侵权删&#xff09;&#xff1a; 控制器部分&#xff08;Controller&#xff09;&#xff1a; 1、物理层&#xff08;PHY…

二进制安装kubernetes v1.11.2 (第十一章 node节点部署)

继续前一章部署。 十一、node节点部署 kubernetes node 节点运行了如下组件&#xff1a; flannel docker kubelet kube-proxy 11.1 部署flanneld 请参考 第五章 11.2 安装依赖包 centos&#xff1a; source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[]}doecho &…