Lua_Trace
<p>摘要:[Lua_Trace] 1. Lua数据结构 - TString</p>
<br />
<p>
此源码分析的版本为 : <strong>Lua 5.3.1</strong></p>
2. TString : 字符串结构
//lobject.h
/*
Header for string value; string bytes follow the end of this structure
(aligned according to ‘UTString’; see next).
/
typedef struct TString {
CommonHeader;
lu_byte extra; / reserved words for short strings; “has hash” for longs /
lu_byte shrlen; / length for shor ...
初识lua
资源下载源代码网址
lua-protobuf源代码文档
lua-protobuf源代码下载
Git Clone代码到本地: 复制代码
git clone http://www.github.com/starwing/lua-protobuf
Subversion代码到本地: 复制代码
svn co –depth empty http://www.github.com/starwing/lua-protobuf
Checked out revision 1.
cd repo
svn up trunk
用法protoc 模块函数返回描述
1234567891011121314protoc.new() Proroc对象 创建新的编译器实例protoc.reload() true 将所有google标准消息重新加载到 pb 模块中p:parse(string) 表格 将架构转换为 DescriptorProto 表p:parsefile(string) 表格 类似 p:parse(),但接受文件名p:compile(string) 字符串 将架构转换为二进制 *.pb 格式数据 ...
redis入门指南之Lua脚本
重要星级 ★★★★★
在进阶章节讲到实现访问频率限制功能,用来限制一个IP地址1分钟最多只能访问100次:
$isKeyExists=EXISTS rate.limiting:$IP
if $isKeyExists is 1
$times=INCR rate.limiting:$IP
if $times>100
print 访问频率超过限制,请稍后再试
exit
else
MULTI
INCR rate.limiting:$IP
EXPIRE $keyName,60
EXEC
当时提到上面的代码会出现竞态条件,解决方法是用WATCH命令检测rate.limiting:$IP键的变动,但是这样做比较麻烦,而且还需要判断事务是否因为键被改动而没有执行。除此之外这段代码在不适用管道的情况下最多要向Redis请求5条命令,在网络传输上会浪费很多时间。我们这时最希望就是Redis直接提供一个“RATELIMITING”命令用来实现访问频率限制功能,这个命令只需要我们提供键名、时间限制和在时间限制内最多访 ...
Lua 全局变量的那些事儿
文章目录
</div>
<p>最近项目查了一个问题,最后发现和<code>_G[moduleName]</code>这个置为<code>nil</code>有关系,找了点资料看看里面的坑还是蛮深的,所以记录一下。</p>
全局环境表 _GLua把所有的全局变量都放在一个称为全局环境的表_G中,这个表只是个普通的表。注意_G._G == _G。由于_G是一个普通的表,所以提供了以动态名称访问全局变量的形式,这又是Lua的一种对元编程的支持。
如_G[varname] = value,更一般的问题是允许使用动态字段名,如_G[“read.io”]默认是不会取出read模块的io字段的,但是使用下面这样实现:
12345678910111213141516171819function getfield(f) local v = _G for w in string.gmatch(f, "[%w_]+") do ...
LeetCode 150. Evaluate Reverse Polish Notation
DescriptionEvaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:
12["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
Solution计算一个后缀表达式(逆波兰式),式中的操作数均为整数,运算符只含有加减乘除四种。
逆波兰式中的运算符每次向前找数个最临近的操作数作为其作用对象,因此只要将每一个数或操作符依次入栈,当入栈的是操作数时不做其他处理,当入栈的是操 ...
Lua程序设计(2)
Lua中的数据结构——表
表表是Lua语言中最主要(事实上也是唯一的)和强大的数据结构。
Lua语言中的表本质上是一种辅助数组,这种数组不仅可以使用数值作为索引,也可以使用字符串或其他任意类型的值作为索引(nil除外)。
Lua语言的表要么是值要么是变量,它们都是对象,表是一种动态分配的对象,程序只能操作指向表的引用。除此之外,Lua语言不会进行隐藏的拷贝(深拷贝:拷贝对象的引用而非整个对象本身)或创建新的表。
表永远是匿名的,表本身和保存表的变量之间没有固定的关系。
对于一个表而言,当程序中不再有指向它的引用时,垃圾收集器会最终删除这个表并重用其占用的内存。
表索引同一个表中存储的值可以具有不同的类型索引,并可以按需增长容纳新的元素。
把表当作结构体使用时,可以把索引当作成员名称使用(a.name等价于a[“name”]),但一般点分形式说明了表时被当作结构体使用的,此时表实际上是由固定的、预先定义的键组成的集合。
注意:a.x表示的是a.[“x”],而不是a[x],a[x]是指由变量x对应的值索引的表。
当被用作表索引是,任何能够被转换为整型的浮点数都会被转换成整型数;相反,不能被 ...
Lua 汉字拼音首字母提取
最近项目上有个需求,需要将一些联系人数据按照拼音首字母排序。google 了一番,竟然没有找到一个合适的 Lua 解决方案。倒是找到一个 lua-pinyin,粗略翻了下源码发现其是将所有的中文返回全部完整的拼音,原理是将所有汉字对应拼音创建好数据字典,载入 Lua,之后查询这个字典,返回对应的拼音。但是这对于我这个需求来说显然是太臃肿了,我只需要返回首字母就可以了,却载入一个巨大的字典,感觉有点浪费内存,尤其是在 OR 对于 Lua 的内存是有限制的情况下。
为此自己造了个轮子:lua-resty-pyf,感兴趣的同学可以去 github 搜下。这里我来说下原理。
如果单从排序的角度来看,我们其实完全可以利用 GBK 中文的顺序编码来解决,而且 GBK 是固定字节编码,即:两个字节(一个区码和一个位码)。我们先计算出汉字对应的 GBK 码点,之后按照码点排序就实现了首字母的排序。
如果需要提取出首字母用于检索,我们就必须建立一个映射关系,把所有汉字对应的首字母全部映射进去。好在已经有个老外做了这部分的工作,这里我用 ffi 简单封装了下,暴露出了 lua 的接口。
需要注意的是我们这 ...
Lua 编程之基本语法与数据类型
学习一门编程语言,必然需要先从它的语法开始,所以今天先来学习下 Lua 的基本语法。
首先一个就要说到注释了,一段程序无论编写得多好,少量的注释也是必要的。在 Lua 中的注释比其他的语言稍有不同。
1234567-- 多行注释--[[ print('多行注释里面的内容') print('多行注释里面的内容2')--]]
这里还介绍一个技巧就是如何解放多行注释里的内容呢,只需要这样:
12345-- 技巧---[[ print('多行注释里面的内容') print('多行注释里面的内容2')--]]
标识符
说完注释我们再来看 Lua 中的标识符,简单的描述就是,Lua 中的标识符都以字母开头(无论大小写)或者下划线开头,切记不要使用特殊字符(¥,@,%…),而且 Lua 中是区分大小写的。列举一些正常的标识符:
12mohd zara abc move_name a_123myname50 _temp j a23b9 ...
lua_regex_cache_max_entries
lua_regex_cache_max_entries
syntax: lua_regex_cache_max_entries <num>
default: lua_regex_cache_max_entries 1024
context: http
Specifies the maximum number of entries allowed in the worker process level compiled regex cache.
The regular expressions used in ngx.re.match, ngx.re.gmatch, ngx.re.sub, and ngx.re.gsub will be cached within this cache if the regex option o (i.e., compile-once flag) is specified.
The default number of entries allowed is 1024 and when this limit is reached, new ...
Lua
Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。
它支持过程编程、面向对象编程、函数编程、数据驱动编程和数据描述。
Lua 结合了简单的过程语法和基于关联数组和可扩展语义的强大数据描述结构。
Lua是动态类型化的,通过使用基于寄存器的虚拟机解释字节码来运行,并且具有带有增量垃圾收集的自动内存管理功能,使其成为配置、脚本编制和快速原型的理想工具。
快速开始
环境
测试环境:macos
安装
brew(推荐)
$ brew install lua
或者下面的
curl
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make macosx test
make install
验证版本
$ lua -v
Lua 5.3.5 Copyright © 1994-2018 Lua.org, PUC-Rio
编写
编写文件 hello.lua。
hello.lua
print("Hello Lua!" ...