最近在学习使用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开源库安装和使用问题原因解决方案 在Redislua脚本编写,我们可能会用到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需要注意。 luatable可以用数字或字符串等作为key, 号得到是用整数作为索引最开始连续部分大小, 如果t[1] == nil, 即使t[5], t[6], t[7]是存在, t仍然为零。对于这类tb[1],tb[2]...
原创 2021-07-20 16:56:49
457阅读
对字符串来说,#取字符串长度,但对于table需要注意。luatable可以用数字或字符串等作为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_pcalllua_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)存储方式: 短字符串:全局存储一份 长字符串:多份 (
转载 5月前
130阅读
lua删除一个全局变量,只需要将变量赋值为nil例:b = nil因此,当且仅当一个变量不等于nil时,这个变量即存在!在默认情况下,变量总是认为是全局。全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化全局也不会出错,不过得到结果是nilLua是动态类型语言,变量不要类型定义,只需要为变量赋值,值可以存储在变量,作为参数传递或结果返回。Lua中有8个基本类型
转载 2月前
43阅读
        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 则是栈顶放值。这个函数会
转载 2月前
54阅读
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,函数是闭包一种特殊情况。另外在LuaC API
  • 1
  • 2
  • 3
  • 4
  • 5