最近在学习使用Lua,也通过基本的语法知识完成了公司的一个关于配置文件参数合法性检查的小任务。虽然任务完成了,但对于一些函数的调用目的还是搞不明白,这两天再次重看了Manual Reference,稍微梳理出了一点眉目,记录在此。
转载
2021-09-29 12:05:32
2013阅读
You call lua_pcall with the number of arguments you are passing and the number of results you want. The fourth argument indicates an error-handling fu
转载
2018-04-13 11:24:00
1107阅读
2评论
Redis中使用Lua脚本(续)- Lua-cjson开源库的安装和使用问题原因解决方案 在Redis的lua脚本编写中,我们可能会用到json的序列化和反序列化。Json序列化:-- RedisLuaCjsonEncode.lua文件
local userName = ARGV[1];
local userObject = {
name = userName,
在很多语言中都有闭包的概念,而在这里,我将主要对Lua语言的闭包概念进行分析与总结。希望对大家学习Lua有帮助。什么是闭包?闭包在Lua中是一个非常重要的概念,闭包是由函数和与其相关的引用环境组合而成的实体。我们再来看一段代码:function newCounter()
local i = 0
return function () -- 匿名函数
i = i
Lua中的 对字符串来说, 取字符串的长度,但对于table需要注意。 lua的table可以用数字或字符串等作为key, 号得到的是用整数作为索引的最开始连续部分的大小, 如果t[1] == nil, 即使t[5], t[6], t[7]是存在的, t仍然为零。对于这类tb[1],tb[2]...
原创
2021-07-20 16:56:49
457阅读
对字符串来说,#取字符串的长度,但对于table需要注意。lua的table可以用数字或字符串等作为key, #号得到的是用整数作为索引的最开始连续部分的大小, 如果t[1] == nil, 即使t[5], t[6], t[7]是存在的,#t仍然为零。对于这类tb[1],tb[2]....才能获取到正确的长度。local tab = {}tab[1] = 1tab[2] = 2tab[3] = nilprint(#tab)--结果为2如果table的第一个元素key为非数字,那么#t
原创
2022-11-29 20:07:59
109阅读
lua_pcall和lua_call功能一样,只是lua_pcall提供了一个可以提供错误处理函数的功能首先压入函数 ,再依次压入参数,现在你就可以调用lua_call了,函数调用后将参数,函数都弹栈,函数返回时会将返回值依次压栈。调用前堆栈情况参数参数函数调用后堆栈情况返回值注意:无论在c函数里怎么调用栈,在pcall之后都会按函数的参数和返回值恢复栈
转载
2013-11-08 20:29:00
587阅读
2评论
这里主要写Lua中的字符串TString相关结构和算法。文章中没有贴Lua源码,只画出了结构图,和算法的伪代码。这样阅读起来更加直观。一、TString的概述 1、lua中字符串是常量,例s = s .. 1 创建了一个新的字符串赋值给s,并不是改变了s字符串中的数据。 2、lua中字符串分为长字符串和短字符串。 长字符串和短字符串区别 (1)存储方式: 短字符串:全局存储一份 长字符串:多份 (
在lua中删除一个全局变量,只需要将变量赋值为nil例:b = nil因此,当且仅当一个变量不等于nil时,这个变量即存在!在默认情况下,变量总是认为是全局的。全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局也不会出错,不过得到的结果是nilLua是动态类型语言,变量不要类型定义,只需要为变量赋值,值可以存储在变量中,作为参数传递或结果返回。Lua中有8个基本类型
Lua允许“多重赋值”,也就是一下子将多个值赋予多个变量。每个值或每个变量之间以逗号分隔: a, b = 10, 2*x 在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值。 x, y = y, x -->交换x 与y
之前接触lua时看到了元表的使用,但是一直一知半解,借此机会对自己的理解做一下总结,方便日后回顾元表本质上来说是一种用来存放元方法的table。我们可以通过对应的key来得到value值,作用就是修改一个值的行为(更确切的说,这是元方法的能力),需要注意的是,这种修改会覆盖掉原本该值可能存在的相应的预定义行为。1. lua中的每个值都可以有一个元表,只是table和userdata可以有各自独立的
之前一直没理清lua_gettable和lua_settable的使用,今天理清了,顺便就做下笔记了。
1.lua_gettable
void lua_gettable (lua_State *L, int index);把t[k] 值压入堆栈,这里的 t 是指有效索引 index 指向的值,而 k 则是栈顶放的值。这个函数会
1、什么是元表 table是lua中一个重要的数据结构,我们可以访问table内的值,但是却无法对两个table进行操作。因此lua提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。 元表就类似于C++中的运算符重载,可以对类对象进行操作,当然元表的功能更强大一些。有两个很重要的函数来处理元表: setmetatable(table,metatabl
(一)元表的概念 –任何表变量都可以作为另一个表变量的元表 –任何表变量都可以有自己的元表 –有元表的那张表相当于子表 –作用:当对子表进行一些特定操作时,会执行元表中的内容(二)设置元表--如何设置元表
metatable={}
mytable={}
--第一参数子表,第二个参数元表
setmetatable(mytable,mytable)(三)元表的特定操作 (1)元表的特定操作_tostr
Lua table(表) table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。 Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。 Lua table 是不固定大小的,你可以根据自己需要进行扩容。 Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.
Q:什么是”Simple Model”?A:所有的文件操作都基于一个默认的输入文件和一个默认的输出文件,这就意味着同一时间对于输入和输出来说,只可操作一个文件(默认的文件)。默认的输入文件初始化是stdin,默认的输出文件初始化是stdout,-- "a.lua"文件中:
--[[ "io.read()"从"io.input()"所指定的默认输入文件中读;
"io.write()"向"i
LPEG是一个供lua使用的基于 Parsing Expression Grammars 的模式匹配库,这篇文章只是讲其如何使用,并不涉及底层如何实现。LPEG 的函数主要分为三类,第一类是创建Pattern的构造函数,第二类是 Capture 函数, 第三类则是 match 等函数。 Capture 就是指一个Pattern,当前匹配时会产生某些捕获的值。Match 等函数lpeg.match
目录1、博客介绍2、内容含义:“:”声明方法并采取“:”的形式调用:“:”声明方法并采取“.”的形式调用:“.”声明方法并采取“.”的形式调用:“.”声明方法并采取“:”的形式调用:3、推送4、结语 1、博客介绍 本篇博客作为Lua学习笔记之一,介绍关于方法中“.”和“:”的用法和不同含义,我们知道在声明方法的时候可以采用“.”或者“:”的写法,同时在调用方法的时候,也可以采用
逻辑运算符认为false和nil是假(false),其他为真,0也是true. and的优先级比or高 其它语言中的and表示两者都为真的时候,才返回为真,而只要有一个假,都返回假.lua虽不仅返回假的语义,还返回导致假的值.也就是说 a and b 在a为f...
转载
2013-01-04 14:52:00
548阅读
2评论
闭包的概念在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数。也就是说,在Lua中,函数是闭包一种特殊情况。另外在Lua的C API