问: 我调用了test模块中的del_env函数,可是main文件里的print并没有消失。 -- test.lua local test = {} function test.del_env () _ENV = nil end return test -- main.lua local test
转载 2017-08-15 09:54:00
61阅读
2评论
Lua中base库里面的接口都是全局可见的,我在 全局环境 一篇里面已经谈到了。在lua5.2中base库增加了2个全局变量和23个函数,这些都可以在lbaselib.c里面找到。 首先增加了两个变量: _G = 当前lua中的全局环境 _VERSION = LUA_VERSION 其中LUA_VERSION是一个宏,在每个版本的Lua中都不一样,定义在lua.h中 可以看到如果我用
原创 2013-01-13 16:21:36
3072阅读
Lua的实现是非常简单而且清晰的,我决定整理一下最近学到的lua知识,我想先从lua的环境开始谈起。 环境是个什么概念呢?在lua中,大部分的结构都可以用table来表达,环境也不例外,环境指的是一张表,这张表里保存这能够使用的全局变量。这样说还是不太清晰,接着看就会明白了。 全局环境是什么呢?Lua有一个大的环境,即 _G 环境。这个是全局环境,保存着全局的变量。可以通过这行代码打印出 _G
原创 2013-01-03 21:03:23
3511阅读
Lua5.2中的math库里面包含了三角函数、指数和对数函数、取整函数、max和min、随机数函数,以及变量 pi 和 huge。这些定义可以在lua源码中lmathlib.c中找到。下面我按我实际使用中频率的高低进行了排序列出,这样方便查找。 math.pi = PI    --圆周率 math.huge = HUGE_VAL   
原创 2013-01-02 22:57:17
9791阅读
首先说一下5.3貌似没有这个问题, 可是眼下最新版的luasocket 3.0 rc1仅仅能支持5.2, 5.3调用的话程序会崩溃(不知道是不是我没配置好) 出现这个问题的解决办法, 想必网上有非常多资料了, 就是C model的静态和动态链接的问题, lua5.2不支持 >= 2的静态链接, 而假
转载 2018-02-27 17:01:00
153阅读
在游戏开发中会经常使用到lua作为游戏逻辑层的脚本语言,各种优势就不说了,虽然平时用的比较多,但对lua语言本身和内部的一些实现并不是很了解,让我们先从luarequire入手来一探require的各种用法吧。require其实类似与C/C++中的#include,就是加载一个指定名称的模块进来,该模块可以来自于lua,也可能来自于C/C++,在lua虚拟机启动时,默认会给我们预先加载好一些模块
lua5.1之后增加了module函数,本文通过一系列测试代码来阐述这个函数的作用通常情况下,我们调用另一个Lua代码文件一般都会使用require函数,比如:上面的代码执行结果,输出 Func1100Func2null我们得出以下的结论1.Func1属于JCTest,需要显示表达出来。2.require返回的是一个table。3.JCTest这个table必须要return 
1.luarequire返回对象mu.luacmu={}mu.constant="这是一个常量"functionmu.func1()io.write("这是一个公有函数!\n")endreturnmutest_mu.luacrequire("mu")print(mu.constant)mu.func1()测试命令:luatest_mu.lua测试结果:这是一个常量这是一个公有函数!2.luareq
原创 2022-05-15 16:43:30
675阅读
目录一、扩展库 - Lua扩展库的运用二、扩展库 - 库加载机制luaL_requiref我们前面几章节讲过,Lua的函数调用有三种类型:C语言闭包函数,C 扩展库API和Lua语言(二进制操作码)。这一章我们主要讲解一下Lua的扩展库Require的实现。一、扩展库 - Lua扩展库的运用我们看几个Lua的示例,一般情况下格式都是:库名称.方法名称(例如:string.find)//字符串库 s
前言从Lua5.1版本开始,就对模块和包添加了新的支持,可使用require和module来定义和使用模块和包。require用于使用模块,module用于创建模块。简单的说,一个模块就是一个程序库,可以通过require来加载。然后便得到了一个全局变量,表示一个table。这个table就像是一个命名空间,其内容就是模块中导出的所有东西,比如函数和常量,一个符合规范的模块还应使require
一、requirerequire(moduleName):用来加载模块;其参数只要是文件名即可;利用模式匹配搜索加载文件;require只会被调用执行一次,会判断文件是否被加载避免重复加载; (1)模式匹配require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法;每一个模式是一个包含可选的问号的文件名。匹配的时候Lua会首先将问号用虚文件
1.Lua 模块与包模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。1.1 require 函数Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了。例如:require("<模块名>")或者:requi
前言从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包。require用于使用模块,module用于创建模块。简单的说,一个模块就是一个程序库,可以通过require来加载。然后便得到了一个全局变量,表示一个table。这个table就像是一个命名空间,其内容就是模块中导出的所有东西,比如函数和常量,一个符合规范的模块还应使require
在网络通信过程中,通信双方要交换数据,需要高度的协同工作。为了正确的解释信号,接收方必须确切地知道信号应当何时接收和处理,因此定时是至关重要的。 在计算机网络中,定时的因素称为位同步。同步是要接收方按照发送方发送的每个位的起止时刻和速率来接收数据,否则会产生误差。 通常可以采用同步或异步的传输方式对位进行同步处理。 1. 异步传输(Asynchronous Transmission):异步传输模
lua5.1 模块理解http://www.lua.org/manual/5.1/manual.html#pdf-module 模块5.3 – ModulesThe package library provides basic facilities for loading and building modules in Lua. It exports two of its functio
转载 3月前
22阅读
最近在参与一个基于C++/LUA的项目, 用LUA实现单元测试时需要在测试代码内对单元测试库文件进行加载, 目的是希望做到在任何测试文件内都可以运行测试, 而不是必须在特定的入口执行. 但是使用LUA内置require函数加载会失败, 因为其是lua实现module功能的一个函数所以会有一些和模块相关的特性, 在定制文件加载目录时会受到一些局限(比如想加载上层
lua 5.1 的 module】 lua 从 5.1 开始终于官方提供统一的 module 实现标准了,这是个值得庆幸的事。今天读了下相关的源码和文档,把这套机制搞清楚了,还是很巧妙的。从简洁这个角度看,要比 python 强 :) 有一点容易被忽略掉(我的同事在用的时候就忽略掉了),module 指令运行完后,整个环境被压栈,所以前面全局的东西再看不见了。比如定义了一个 test 模块,
在嵌入式linux上,想最简单方便的使用网络资源,如Ftp,http,和socket,用c实现容易吗?解析json,用c实现容易吗?不如用dkjson.lua这个库。所以,使用lua脚本强大的网络模块,能给嵌入式linux应用开发带来不少方便。且lua很容易和c集成到一块儿,实现一些强大功能。以下记录下移植luasocket网络库到嵌入式linux开发板的过程:首先下载源码,地址在...
原创 2021-08-31 10:24:34
869阅读
参考文档  --- 笔记:Lua/JS尾调用   http://www.ruanyifeng.com/blog/2015/04/tail-call.html Lua的闭包详解   (和JS一吊样)Lua中的元表与元方法(_index与_newIndex区别) qucik luarequire和import的区别     2种
转载 4月前
33阅读
相信大家在lua中都用过require。为了达到代码复用和结构化的目的,各种语言都有require机制。luarequire看似简单,其实里面有很多玄机。一  require从哪里加载模块文件从虚拟机的path,cpath等全局变量中。虚拟机有默认的值,在变量package.path和package.cpath中。例如我打印的path,cpath分别为:path : /usr
  • 1
  • 2
  • 3
  • 4
  • 5