lua语法
lua特性开源,轻量级,c语言编写实现,实现面向对象有点绕,执行效率高
lua开发环境
linux
123456789101112131415-- 下载lua包、解压wget -c http://www.lua.org/ftp/lua-5.3.0.tar.gztar zxvf lua-5.3.0.tar.gz-- 下载libreadline相关支持sudo apt-get install libreadline5sudo apt-get install libreadline-gplv2-dev-- 编译安装cd lua-5.3.0make linuxsudo make install-- 测试命令lua
windows
运行环境 LuaForWindows –> https://github.com/rjpcomputing/luaforwindows/releases
IDE pycharm –> https://blog.csdn.net/u012911347/article/details/82191541
基本语法
注释
12345--[[这是多行注释 ...
基于AndroLua_Pro的Android开发代码示例
温馨提示:请使用电脑浏览器打开,以确保最佳的阅读体验,谢谢.( ̄▽ ̄)”
我希望你有了一些AndroLua_Pro的基础, 如果还没有可以结合这篇文章(基于AndroLua_Pro的Android开发笔记)来看.
其实我代码都放在了GitHub, 可以去看看呗.
缓存
缓存函数123456789for i=0,10000,1 do print(string.format("%s",tostring(i)))end--改为local fun=string.formatfor i=0,10000,1 do print(format("%s",tostring(i)))end
缓存定值或者减少无光运算等:
(这个不举例了, 我相信你懂)
除法换乘法:
(你要知道计算机算乘法比乘法高效多了)
用Lua不用Java
能用Lua语句就不要用Java语句:
(统计结果是lua会高效6~30倍)
能用静态/动态库(自带的)方法就不要自写方法:
(这个是一个很原则的问题, 因为Lua底层其实就是C, 因为动态库文件的存在.os ...
lua与luajit string hash算法对比
说明研究lua与luajit两种string hash算法的原理,以及性能对比
string hashlua
如果string长度小于32,则会对所有字符串的字符进行遍历,然后计算hash值
如果string长度大于等于32,则把string进行等分,等分间隔为长度/32+1,然后取每等分的第一个字符进行hash值计算。所以不管字符串多长,最多会循环32次
代码123456789unsigned int (const char *str, size_t l, unsigned int seed) { unsigned int h = seed ^ cast(unsigned int, l); size_t l1; size_t step = (l >> LUAI_HASHLIMIT) + 1; // LUAI_HASHLIMIT值为5,l是字符串长度,不是一 for (l1 = l; l1 >= step; l1 -= step) h = h ^ ((h<<5) + (h>>2) + cast_byte(str[l1 - 1 ...
Lua学习笔记一
PS:由于公司项目中用到Lua,所以准备学习一下,这里做下学习笔记。
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
基本语法交互式编程lua -i 进入交互式编程
脚本式编程新建一个hello.lua文件,将lua代码写在hello.lua中
print("Hello world")
执行:
lua hello.lua
结果:
Hello rorld
也可以将代码改为如下形式:
12#!/usr/local/bin/luaprint("Hello world")
执行:
./hello.lua
结果和上面一样。
这种模式称为脚本式编程。
注释单行注释:
--
多行注释:
1234 多行注释 多行注释--]]
标识符以字母或者下划线_开头,后面加上0个或多个字母,下划线,数字。(标识符区分大小写)
关键字
and
break
do
else
elseif
end
false
for
function
if
in
local
nil
n ...
Lua之Table个人总结
在lua中Table是数组和集合的混合物。作为数组时,可以使用除了nil以外的值作为索引。
Table的构造利用下标来标明元素123456local table = {}table[1]='hello'table[5]='world'for i,v in pairs(table)do print(table[i])end
输出121 hello5 world
在Table内部通过索引来声明1234local table = { [1] = 'hello', [5] = 'world' }for i, v in pairs(table) do print(table[i])end
输出121 hello5 world
在Table内部不通过索引来声明1234local table = {'hello','world'}for k, v in pairs(table) do print(k,v)end
输出121 hello2 world
Note:
1,可以看到通过 ...
反编译OpenWrt的Lua文件
![](https://xiaokou.top/usr/uploads/md/1569651126274.png)
先是今天的主角,极路由。
获取root权限然后拿到web源码,找到对应文件
确认了是lua 5.1以后,google找到了文章,根据内容操作发现了一些问题,最后也都解决了,在这里做一个记录。
首先
Lua有一种预编译机制,能够把文本代码预编译成Bytecode/Opcode 提高解析、执行速度,降低内存占用
原版Lua(Vanilla Lua)默认的Bytecode的字节结构和OpenWrt的并不相同,因为OpenWrt为了一系列需要,在截止我写此文时候, 在Lua5.1.5的版本主线上 , 对原版的LUA引擎打了补丁 , 导致其产生的字节码和原版的Lua产生的并不一样 ,( http://lua-users.org/lists/lua-l/2012-06/msg00065.html ),因此也不能使用原版的Lua引擎解释,会报类似 bad header in precompiled chunk 的错误
本机尝试逆向原版的Lua产生的LuaC, 使用这 ...
399 Evaluate Division
Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer does not exist, return -1.0.
Example:Given a / b = 2.0, b / c = 3.0.queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? .return [6.0, 0.5, -1.0, 1.0, -1.0 ].
The input is: vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, st ...
xLua热更新4之Hotfix(上篇)
思考并回答以下问题:
xLua里面有一个热补丁的功能。就是你有的C#代码不用改,就可以加入热更新的功能。
为什么叫热补丁呢?已有项目中的C#代码只需要增加一些配置,不用做其他任何调整就可使用上类似热更新的功能。由于和热更新也不同,所以叫热补丁。这也是xLua首创的一项功能。
热补丁的优点有这些:
侵入性小,老项目原有代码不做任何调整就可使用。
出问题了才用Lua代码来打补丁,这时才会走到lua代码逻辑。运行时影响小,不打补丁基本和原有程序一样。
使用流程xLua的热补丁使用大体流程如下:
添加HOTFIX_ENABLE宏打开该特性(在Unity3D的File-›Build Setting-›Scripting Define Symbols下添加)。编辑器、各手机平台这个宏要分别设置。如果是自动化打包,要注意在代码里用API设置的宏是不生效的,需要在编辑器设置。
(建议平时开发业务代码不打开HOTFIX_ENABLE,只在build手机版本或者要在编译器下开发补丁时打开HOTFIX_ENABLE)
配置热补丁代码,标识要热更新的类型
执行XLua/Generate Code ...
Lua 排序算法
归并排序(Merge Sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并操作(Merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并排序有多路归并排序、两路归并排序, 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。
算法步骤
把 n 个记录看成 n 个长度为 1 的有序子表
进行两两归并使记录关键字有序,得到 n/2 个长度为 2 的有序子表
重复第 2 步直到所有记录归并成一个长度为 n 的有序表为止。
动画演示
Lua 实现
local function mergeSort(arr, low, high)
local low = low
local high = high
if high - low < 1 then return end
<span class="kd">local</span> <spa ...
Evaluation of clustering
聚类的目标high intra-cluster similarity and low inter-cluster similarity
数据集有groundtruth时,如何评估聚类结果的优劣?
4种评估方法
purity。 简单。
NMI。从信息论角度解释。
RI。实质是accuracy,同时惩罚了FP和FN两种错误。
F-measure。为不同的错误类型(FP和FN)赋予不同的权重。
puritypurity取值范围[0,1],越大越好。 当cluster数量(k)很大时,purity值容易高,极端情况下,当一个类只包含一条记录时,purity取1.
begin{equation} purity(W,C) = frac {1}{N} sum_k max_j |w_k cap c_j| label{rij}end{equation}
N为数据集大小,$W=\{w_1,w_2,…,w_k\}$ is the set of clusters,即聚类结果。 $C = \{c_1,c_2,…,c_j\}$ is the set of classes,即groundtruth. 取 ...