Lua 学习 chapter5
目录
表索引
表构造器
数组、列表和序列
遍历表
安全访问
表标准库
练习
Work hard, come on baby.
This chapter expresses the table.
表索引
a.x 表示的意思和a[“x”]一样,所以前者的可读性更高。
1
2
3
4
5
local a = {} --空白表,建立了一个表的索引
a.x = 10
a.x --> 10
a.y --> nil
a = nil -->取消对表的索引,然后lua的垃圾处理器就会对其进行回收
表构造器
表构造器是用来创建和初始化表的表达式,也是lua语言中独有的也是最有用、最灵活的机制之一。
在构造表的时候可以使用记录式和列表式,当然你也可以混用它们:
1
2
3
4
5
6
7
8
9
10
11
12
days= {"Mon","Tues","Wednes","Thurs","Fri","Satur"," ...
150.Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are +, -, *, /. Each operand may be an integer or another expression.
思路分析
逆波兰表示法,又称为后缀表示法,是一种不需要括号的一种四则运算表示法。比如:9 3 1 - 3 * + 10 2 / + ,就是一种后缀表示法。计算方法就使用栈,遇到数字就入栈,遇到符号就弹出栈顶的两个数字并将这两个数字的计算结果压入栈中。
实现细节
字符串转整型函数stoi()
整型函数转字符串to_string()
代码实现
12345678910111213141516171819202122232425class {public: int evalRPN(vector<string>& tokens) { stack<int> stk; int number; ...
tolua++安装
<a href="/2015/11/11/lua_cpp_bind/" rel="next" title="C++与Lua本质原始交互API">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
C++与Lua本质原始交互API
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item"> ...
lua 脚本执行流程
简介
LuaState
执行流程
编译
执行
参考资料
简介
之所以写这篇文章,因为在看lua源码时候,感觉对lua脚本执行流程有一个全局认识对
研究lua源码本身起着重要作用,故此在这里简单介绍一下lua脚本是何时被加载、又是
何时执行的。
LuaState
想要更好的理解脚本执行流程,就必须先了解LuaState相关初始化,源码里简称L,lua
状态机是lua框架的核心,无论是lua的编译和lua的执行都离不开这个lua状态机,这里
使用UniLua作为源码参考,方便大家理解,初始化lua状态的方式很简单:
ILuaState Lua = LuaAPI.NewState();
Lua.L_OpenLibs();
需要注意的是在初始化完lua状态机后,需要初始化lua标准库,也就是上面的第二行代码
否则lua标准库的函数是无法调用的。
执行流程
lua脚本执行流程是在LuaState初始化完成的基础上进行的,核心可以分为两部分,即lua
的编译和lua的执行。
编译
编译lua源码主要调用这些函数进行源码编译,可以 ...
xLua游戏中的热更新
思考并回答以下问题:
目前Unity下的Lua热更新方案大多都是要求要热更新的部分一开始就要用Lua语言实现,不足之处在于:
1、接入成本高,有的项目已经用C#写完了,这时要接入需要把需要热更的地方用Lua重新实现;
2、即使一开始就接入了,也存在同时用两种语言开发难度较大的问题;
3、Lua性能不如C#;
xLua热补丁技术支持在运行时把一个C#实现(函数,操作符,属性,事件,或者整个类)替换成Lua实现,意味着你可以:
1、平时用C#开发;
2、运行也是C#,性能秒杀Lua;
3、有bug的地方下发个Lua脚本fix了,下次整体更新时可以把Lua的实现换回正确的C#实现,更新时甚至可以做到不重启游戏;
xLua教程Lua文件加载
执行字符串
最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法
比如:1luaenv.DoString("print('hello world')")
完整代码见XLuaTutorialLoadLuaScriptByString目录
但这种方式并不建议,更建议下面介绍这种方法 ...
HMExpressionEvaluator——一个使用简单又强大的表达式计算库
demo下载地址
一. 简介
一个数学表达式计算器,能实现和 UIWebView 的 stringByEvaluatingJavaScriptFromString: 一样的计算效果,但效率要高很多,可以在子线程中执行;
基本全面覆盖 NSExpression 的 expressionForFunction:arguments 中的所有function,使用要比 NSExpression 简单很多,只需将注意力放大expression表达式的编辑上,将任意复杂度的表达式,通过eval:方法传入便可轻松得到计算结果;
支持复杂加减乘除四则运算,与或非逻辑运算,和大于小于等比较运算;
支持三目运算;
表达式中能自动识别处理的函数,基本全部覆盖NSExpression,有的未实现的,因为可以自己有数学表达式表达,比如 a+b,这个表达式计算最基本功能,无需通过函数调用来实现;
以上所述的计算类型在符合数学表达式逻辑的前提下,可以组合在一个表达式中,函数支持嵌套调用;
支持字符串相加(字符串拼接);
开发者可以扩展自己的函数,通过构建 HMExpressionFunction 对 ...
Lua安装
Lua并不象其它许多”大而全”的语言那样包括很多功能,比如网络通讯、图形界面等,它提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
一、安装
centos7下安装
安装依赖yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
cd /usr/local/src
sudo wget https://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
lua -v
Mac下安装
cd /usr/local/src
sudo wget https://www.lua.org/ftp/lua-5.3.5.tar.gz
sudo tar -zxvf lua-5.3.5.tar.gz
cd lua-5.3.5
sudo make macosx test
sudo make install
lua ...
归并排序算法的lua实现
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758-- 归并排序算法学习--[[ 1. 设置临时table, 用来存放排序之后的数组 2. 设定两个值i,j, 初始值分别为两个待排序数组的第一个key 3. 比较key为i,j对应的值, 较小的放入合并空间, 并移动到下一个值 4. 重复步骤3到i,j其中一个超出数组最大值 5. 将另一个数组的剩下的元素复制到临时table中]]function merge(sourTab, tmpTab, startIndex, midIndex, endIndex) local i = startIndex local j = midIndex + 1 local k = startIndex while(i <= midIndex and j <= endIndex) do if sourTab[i] > sourTab[j] then tmpTab[k] = ...
Lua数据类型
前言
接触lua近4年了,一直断断续续读相关源码,这次计划把lua源码整体分析一遍,基于最新版本(Lua 5.3.5), 完成如下文章(顺序可能不一致):
基本数据类型
string/table 剖析
luavm 分析
lexer/ast/gencode 词法分析/语法树/生成字节码
lua周边支持:debug/continue等
lua源码简介
可以从lua官方网站下载最新源码:源码下载
推荐直接用 vscode+wsl 阅读代码,方案参考,然后可以配置Task/Debug, 很方便地即可实现断点,code定位等常用功能, 注意修改一下gcc编译优化等级即可
Lua数据类型概括
lua数据类型定义在 lobject.h 中, 暴露出来的类型一共有9中:nil/bool/lightud/number/string/table/func/ud/thread, 定义:
#define LUA_TNIL 0
#define LUA_TBOOLEAN 1
#define LUA_TLIGHTUSERDATA 2
#define LUA_TNUMBER ...
Nginx 使用 lua
1. 软件版本
2. 环境准备
3. 软件安装
4. 配置lua脚本
5. 配置php
6. 配置日志,记录post请求的request_body 和response_body
1. 软件版本
系统 centos6.7X86_64
nginx 1.11.5
lua-nginx-module 0.10.7
PHP 5.6.27
2. 环境准备
配置yum仓库
wget -O /etc/yum.repos.d/CentOS-Base.repo[https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2](https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2)
wget -O /etc/yum.repos.d/epel.repo[https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/epel?co ...