Lua Packages

Lua 并没有提供明确的机制来实现 packages。然而,我们通过语言提供的基本的机制很容易实现他。主要的思想是:像标准库一样,使用表来描述 package。

基本示例

package的简单方法就是对包内的每一个对象都加包名作为前缀。官方示例代码用complex复数表作为例子来阐述package的基本语法:

complex = {}
function complex.new (r, i) return {r=r, i=i} endcomplex.i = complex.new(0, 1)function complex.add (c1, c2)return complex.new(c1.r + c2.r, c1.i + c2.i)
endfunction complex.sub (c1, c2)return complex.new(c1.r - c2.r, c1.i - c2.i)
endlocal c1 = complex.add(complex.new(1,2),complex.new(2,-2))
print(c1.r,c1.i) --3       0
return complex

私有成员local

在成员前添加local修饰符即可实现对这个成员的访问空间仅在这个package内部,并且内部可以不需要再重复写上package名。比如以上例子中的add函数,前面加一个local修饰后的代码结构:

local function add (c1, c2)return complex.new(c1.r + c2.r, c1.i + c2.i)
endlocal c1 = add(complex.new(1,2),complex.new(2,-2))
print(c1.r,c1.i) --3       0

如若既希望其是公有函数(在package外面可被访问)又不希望其在package内部通过package.的冗余前缀方式访问,则可以直接结合两种方案,在声明时为local,在最后显式链接即可,比如上面的add函数,在最后一行写complex.add = add即可。我们需要注意的是这个定义不能放在函数的定义local function add之前,因为lua是顺序读取文件的,在函数定义之前则会意味着complex.add = nil.

使用全局表

如若不想用local也期望达到以上直接访问的效果(不需要冗余前缀访问),则可以利用setfenv(1,complex)来设置当前环境。此句话的目的就是当前的默认Global环境是complex,如果定义了complex.a = 1,则设置此环境之后的print(a)就是1。由此可在调用函数的时候就不需要package前缀了。当然这里需要注意的是Lua5.4已经不再支持setfenv了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sheng的学习笔记-docker部署数据库oracle,mysql

部署目录:sheng的学习笔记-部署-目录-CSDN博客 docker基础知识可参考 sheng的学习笔记-docker部署,原理图,命令,用idea设置docker docker安装数据库 mac版本 安装oracle 下载oracle镜像 打开终端,输入 docker s…

Python网络通信

目录 基本的网络知识 TCP/IP IP地址 端口 HTTP/HTTPS HTTP HTTPS 搭建自己的Web服务器 urllib.request模块 发送GET请求 发送POST请求 JSON数据 JSON文档的结构 JSON数据的解码 下载图片示例 返回所有备忘录信息 此文章讲解如何通过Python访问互联网上的资源&a…

《CSS 简易速速上手小册》第7章:CSS 预处理器与框架(2024 最新版)

文章目录 7.1 Sass:更高效的 CSS 编写7.1.1 基础知识7.1.2 重点案例:主题颜色和字体管理7.1.3 拓展案例 1:响应式辅助类7.1.4 拓展案例 2:深色模式支持 7.2 Bootstrap:快速原型设计和开发7.2.1 基础知识7.2.2 重点案例…

ueransim关于ue侧nas层相关代码解读

一.在文件UERANSIM\UERANSIM-3.2.6\src\ue\nas中enc.cpp中完成了NAS(非接入层)信令的加密和解密是通过NAS_ENC模块实现的。NAS_ENC模块负责将NAS信令消息进行加密,以确保其传输过程中的安全性。 具体来说,当UE发送NAS信令消息时&…

JavaGuide

JavaGuide(Java学习&面试指南) | JavaGuide JavaGuide 是一个面向 Java 开发者的知识整合平台,它提供了 Java 相关的学习资源、面试题、开发工具、框架和库等内容。JavaGuide 的目标是帮助 Java 开发者更好地学习和应用 Java 技术。 Ja…

Linux目录的 /bin 和 /sbin 和 /usr/bin 和 /usr/sbin 和 /usr/local/bin 和 /usr/local/sbin

Linux目录的 /bin 和 /sbin 和 /usr/bin 和 /usr/sbin 和 /usr/local/bin 和 /usr/local/sbin /bin/sbin/usr/bin/usr/sbin/usr/local/bin/usr/local/sbin 在Linux系统中,不同的目录用于存放不同类型的文件,特别是可执行文件。/bin、/sbin、/usr/bin、…

零基础如何学习编曲,究竟需要准备什么?

初学者常常弄不清楚作曲和编曲的区别,在这里我为大家讲解一下两者的差别。狭义上来说:作曲可以理解为写旋律,而编曲就是写伴奏。那么接下来让我们一起看看零基础编曲,究竟需要准备些什么? 一、理论 众所周知,乐理是最基础的理论…

【JMX】JAVA监控的基石

目录 1.概述 2.MBean 2.1.Standard MBean 2.2.Dynamic MBean 2.3.Model Bean 2.4.Dynamic MBean和Model Bean的区别 2.5.MXBean 2.6.Open Bean 3.控制台 1.概述 什么是JMX,首先来看一段对话: Java Management Extensions(JMX&#…

探索ChatGPT-4:智能会话的未来已来

深入了解ChatGPT-4:前沿AI的强大功能 ChatGPT-4是最先进的语言模型之一,由OpenAI开发,它在自然语言理解和生成方面的能力已经达到了新的高度。如今,ChatGPT-4已经被广泛应用于多个领域,从教育到企业,再到技…

Java学习第十一节之命令行传参和断更原因

package method;public class Demo03 {public static void main(String[] args) {//args.length数组长度for (int i 0; i < args.length; i) {System.out.println("args[" i "]:"args[i]);}}}为什么没更新了&#xff1f; 家里有长辈生病了不好在医院照…

面试 JavaScript 框架八股文十问十答第八期

面试 JavaScript 框架八股文十问十答第八期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;实现call、apply…

【算法与数据结构】496、503、LeetCode下一个更大元素I II

文章目录 一、496、下一个更大元素 I二、503、下一个更大元素II三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、496、下一个更大元素 I 思路分析&#xff1a;本题思路和【算法与数据结构】739、LeetCode每日温度类似…

案例:爬取豆瓣电影 Top250 的数据

这是一个简单的Python爬虫案例&#xff0c;通过发送 HTTP 请求&#xff0c;解析网页内容&#xff0c;提取目标信息&#xff0c;并循环爬取多页数据&#xff0c;最终获得了豆瓣电影 Top250 的电影名称、评分、评价人数等信息。您可以根据这个示例来编写其他爬虫案例&#xff0c;…

魔塔游戏

1.题目 这道题是2024-2-6的签到题&#xff0c;题目难度中等。 考核的知识点为&#xff1a;贪心算法优先队列。 题目链接&#xff1a;魔塔游戏 小扣当前位于魔塔游戏第一层&#xff0c;共有 N 个房间&#xff0c;编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数…

嵌入式硬件越老越吃香,确实没错!

不知不觉已经从事硬件设计7年多了&#xff0c;7年对于一个从事硬件设计来说能有几个完整的生涯。2016年毕业&#xff0c;2023年即将结束&#xff0c;我已经在汽车这行业“摸爬滚打”了7年的时光。 回顾这7年&#xff0c;自己真的成长了很多很多。有项目失败整改的经验收获&…

Linux进程间通信(IPC)

要想进程间通信&#xff0c;数据交换&#xff0c;必须通过内核&#xff1b; 一个进程将数据写到内核&#xff0c;然后另一个进程从内核读走数据。 IPC&#xff1a;进程间通信&#xff08;interprocess communication) 通信方式&#xff1a; 管道信号共享映射区&#xff08;…

假期day7

设计qq界面 代码 ui->lab1->setPixmap(QPixmap(":/pictrue/denglu.webp"));ui->lab1->setScaledContents(true);ui->lab2->setPixmap(QPixmap(":/pictrue/passwd.jpg"));ui->lab2->setScaledContents(true);ui->lab3->setP…

过年在家玩幻兽帕鲁,腾讯云和阿里云Palworld新年礼物

过年在家玩幻兽帕鲁Palworld&#xff0c;阿里云和腾讯云助力玩家一键全自动部署幻兽帕鲁服务器&#xff0c;成本仅需26元&#xff0c;联机三五好友一起开黑&#xff0c;春节畅玩幻兽帕鲁&#xff0c;自建4核16G或8核32G配置&#xff0c;稳定不卡&#xff0c;不用担心官方服务器…

fast.ai 深度学习笔记(三)

深度学习 2&#xff1a;第 1 部分第 6 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-6-de70d626976c 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

监控概述、安装zabbix、配置zabbixagent、添加被控端主机、常用监控指标、自定义监控项

监控概述 对服务的管理&#xff0c;不能仅限于可用性。 还需要服务可以安全、稳定、高效地运行。 监控的目的&#xff1a;早发现、早治疗。 被监控的资源类型&#xff1a; 公开数据&#xff1a;对外开放的&#xff0c;不需要认证即可获取的数据私有数据&#xff1a;对外不开…