lua
函数
函数定义
1
2
3
function function_name (arc) -- arc 表示参数列表,函数的参数列表可以为空
-- body
end
1
2
3
local function function_name (arc)
-- body
end
由于全局变量一般会污染全局名字空间,同时也有性能损耗(即查询全局环境表的开销),因此我们应当尽量使用“局部函数”,其记法是类似的,只是开头加上 local 修饰符
函数的参数
按值传递(在调用函数的时候,若形参个数和实参个数不同时,Lua 会自动调整实参个数。调整规则:若实参个数大于形参个数,从左向右,多余的实参被忽略;若实参个数小于形参个数,从左向右,没有被实参初始化的形参会被初始化为 nil。)
按引用传递(在常用基本类型中,除了 table 是按址传递类型外,其它的都是按值传递参数)
1
2
3
4
5
6
7
8
9
10
local function func( ... ) -- 形参为 ... ,表示函数采用变长参数
...
采访 Lua 发明人
<div class="entry">
<p id="fortitle"> 2012-12-03
转载云风的一篇文章
采访 Lua 发明人的一篇文章
《Masterminds of Programming: Conversations with the Creators of Major Programming Languages》是本相当不错的书。博文翻译出版了这本书,中文名叫做《编程之魂》。
书是好书,可惜翻译这本书需要对各种语言的深入研究,看起来译者有点力不从心。出版社打算重新做这本书。受编辑所托,我校对了其中第七章:有关 Lua 的一段。原文读下来拍案叫好。可惜译文许多地方看起来有些词不达意。许多在口语化交流中提到的术语被忽略了做了错误的翻译。有些部分应该是对 lua 理解不够而没能表达清楚。
仔细校对了两段后,我干脆放弃原译本,自己动手翻译了一份(保留了不到 1/4 原来的译文)。虽然个 ...
OpenResty中使用Lua的MongoDB库,使用连接池节省连接认证时间
因为服务器的mongodb开启了auth认证的,所以每次连接都要验证密码,测试了下GitHub上面的几个lua的mongodb库,无论是官方的mongorover,还是纯的lua库:lua-resty-mongol3,一个简单的insert操作都比php耗费的时间更长,如果业务用lua来做的优势就没有那么明显了,单纯的不认证的insert操作lua的优势很是明显的,所以要么取消认证,要么就是可以结合openresty的连接池。而且发现使用连接池后,纯的lua mongodb库竟然比mongorover更快。下面是动态判断该连接是否是连接池里面的一些判断,把连接与认证封装在一起,减少不必要认证次数。同时修改了仓库的源码,以支持支持自定义连接池,这样可以让不同 用户名、密码、数据库 的连接分开,不相互干扰。
新建一个lua文件,只做连接操作。
123456789101112131415161718192021222324252627282930313233343536local mongo = require "resty.mongol"local _M = {}--把连接 ...
Survey of Federated Learning and Idea Evaluation
第一类是联邦学习开创者讲述联邦学习problem setting,以及几个常用的算法的文章,这类工作目前显然不能再做了,但需要阅读。
Federated Optimization: Distributed Optimization Beyond the Datacenter这篇文章是联邦学习的雏形,在2015年就被提交至arxiv上,所使用的算法与现版本有所区别,与之前的两个学习算法有相当大关联,SVRG与DANE.
SVRG全称为stochastic variance reduction gradient,主要的工作是对随机梯度下降做了一些修正,使得每一步的梯度估计方差更小,加快收敛速度,相关的工作可以追溯到2012的两篇文章。
DANE全称为Distributed Approximate NEwton,这是个分布式学习算法,主要工作是提出了一个近似类牛顿优化方法,并证明其在二次目标函数上拥有更快的收敛速度。
这篇文章所提出的联邦学习算法,实际可以看作用SVRG产生DANE所需解的估计,然后按照DANE的方式进行更新。
更进一步,在DANE这篇论文总结相关工作的部分,可以看到现在所广 ...
Lua初识
Lua初识Lua 数据类型8种基本类型:nil :表示无效值(条件表达式代表false)boolean:布尔 包含两个值:true和falsenumber: 表示双精度类型的实浮点数string: 字符串有””或者’’表示userdata: 任意存储中的C数据结构function: Lua或C编写的函数thread: 执行独立线路,执行协同程序table: 关联数据(associative arrays),索引是数字或者字符串,table的创建通过”构造表达式”来完成,最简单构造表达式{}(创建一个空表)nil1234nil:空 print(type(x)=="nil") true print(typeI(x)==nil) false 注: type(X)==nil 结果为 false 的原因是因为 type(type(X))==stringnumber1234567number类型--双精度类型(默认类型修改luaconf.h文中定义)例如:print(type(2))print(type(2.2))print(type(0.2))print(type(2e+1))p ...
Lua 学习 chapter22
目录
具有动态名称的全局变量
非全局环境
环境和模块
_ENV和load
只有疯狂过,你才知道自己究竟能不能成功。
具有动态名称的全局变量
在lua中,所有的全局变量都被存在_G中,通过_G[name]可以访问到任意一个全局变量。在lua中,全局变量不需要声明就可以直接使用,但是这个可能会造成非常难以查询的bug,所以我们可以对全局变量进行简单的封装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
setmetatable(_G, {
__newindex = function(_, n)
error("attempt to write to undeclared variable" .. n, 2)
end,
__index = function(_, n)
error("attempt to read undeclared va ...
欢迎使用LuaPerfect!
简介
LuaPerfect是腾讯公司开发的专业级的Lua集成开发环境,致力于为广大Lua开发人员提供免费的专业的Lua编辑调试工具。
LuaPerfect基于纯C++实现了独立的Lua编辑和调试工具:
1、接入方便:界面风格类似VS,符合VS用户习惯,非插件,接入自动化程度高,无需配置。
2、调试功能强大:稳定的基础调试功能,强大的表达式监视,悬浮监视,日志跳转,条件断点,Lua异常捕获,Lua反汇编等功能。还可以直接查看C#对象的各种成员,在Unity下还能列出组件列表和子物体列表。
3、调试性能高:调试密集Lua运算的游戏也不掉帧,因此特别适合调试游戏。
4、编辑功能强大:支持语法/语义代码高亮,自动API生成,语法检查,单词/语句自动完成,按语义跳转符号,代码格式化,类型推导,类型注解,全工程符号搜索,按语义重构等功能。
5、自带性能测试功能,测试密集Lua运算游戏的性能也不掉帧,因此结果更精确。
6、资源占用少:相对脚本化插件化的方案(IDEA,VSCode等),同等功能下内存等资源仅同类软件的一半左右。
7、稳定流畅:运行稳定流畅,经过内部外部大型项目重度使用验证,得到非常高 ...
lua
LuaInterface 库LuaInterface下载地址
LuaInterface是一个用于在Lua语言和Microsoft .NET平台的公共语言运行时(CLR)之间集成的库。 Lua脚本可以使用它来实例化CLR对象,访问属性,调用方法,甚至使用Lua函数处理事件。
LuaInterface.Lua类是CLR访问Lua解释器的主要接口,一个LuaInterface.Lua类对象就代表了一个Lua解释器(或Lua执行环境),Lua解释器可以同时存在多个,并且它们之间是完全相互独立的。
示例在 C# 中调用 Lua1234567891011MyMath = {}MyMath.Name = "MyMath"MyMath.PI = 3.1415function (first, second) return first+secondendreturn MyMath
1234567891011121314151617181920212223242526272829303132// Program.csusing System;using LuaInterface;c ...
Lua的性能优化建议
多的使用局部变量
在lua中,局部变量的操作相对于全局变量更少。
将用到的外层函数赋值到一个局部变量中也可以大幅度的减少调用开支。
访问外层局部变量(也就是外一层函数的局部变量)并没有访问局部变量快,但是仍然比访问全局变量快。考虑如下代码:
function foo(x)
for i = 1, 1000000 do
x = x + math.sin(i)
end
return x
end
print(foo(10))
我们可以通过在 foo 函数外面定义一个 sin 来优化它:
local sin = math.sin
function foo(x)
for i = 1, 1000000 do
x = x + sin(i)
end
return x
end
print(foo(10))
第二段代码比第一段快 30%。
字符串方面
参考资料:
lua优化建议
浅析android手游lua脚本的加密与解密(前传)
为了能让一些同学更好的学习lua的逆向,我把收集的一些资料组合成一篇lua加解密的相关工作给大家参考,当然,看这篇文章之前还是需要一些lua的基础知识,这里推荐云风大佬的《Lua源码欣赏》[19],建议结合搜索引擎学习之。
文章分2部分介绍,第1部分介绍lua加解密的相关文章介绍,第2部分介绍lua的相关工具。
相关工作: 这一节介绍了互联网上对lua的各种相关文章,包括lua的加解密如文件格式的解析、基于lua的游戏和比赛的介绍、lua的hook技术等。
1. lua加解密入门:
非虫大佬[1-4] 写了4篇关于luac和luajit文件格式和字节码的相关文章,并开源了010Editor的解析luac和luajit的模板代码。Ganlv 同学[7] 在吾爱破解写了7篇关于lua加解密的系列教程。腾讯gslab[9] 写了一篇关于lua游戏逆向的入门介绍,这是一篇比较早的lua游戏解密的文章。INightElf 同学[10] 写了一篇关于lua脚本反编译入门的文章。
2. 基于lua的手游:
lua不仅能用于端游戏,也能用于手游,而且由于手游的火热,带动了lua逆向相 ...