Programming in Lua(Thrid Edition)笔记
1 Getting Started
statements之间的分号可选
-i选项会让Lua在执行完指定chunk后进入交互模式
1 lua -i prog
在交互模式中可用dofile()函数运行一个外部文件chunk
退出交互模式:ctrl-D in UNIX,ctrl-Z in Windows,os.exit()
标识符尽量不要以一个或多个下划线开头,其多在Lua内有特殊用处
单行注释--,多行注释--[[和]]--,---[[只起到单行注释的作用
use Lua as a script interpreter in UNIX systems: 在脚本的第一行加上:
1#!/usr/local/bin/lua
或者1#!/usr/local/env lua
-e选项允许直接执行命令行里的代码
1% lua -e "print(math.sin(12))"
-l选项会加载一个库
1% lua -llib
会加载文件名为lib.lua的库
命令行中的脚本参数,以脚本名为0,右边的为正,左边的为负1% lua -e "sin=math. ...
Lua Key
12345678910111213141516171819202122232425262728293031323334353637383940-- 查询读取按键KEY = 3LEDB = 5 LEDR = 6LEDG = 7gpio.mode(KEY,gpio.INPUT)gpio.mode(LEDB,gpio.OUTPUT)gpio.mode(LEDR,gpio.OUTPUT)gpio.mode(LEDG,gpio.OUTPUT)gpio.write(LEDB,gpio.LOW)gpio.write(LEDR,gpio.LOW)gpio.write(LEDG,gpio.LOW)function checkKey() if gpio.read(KEY) == 0 then keyCnt = keyCnt + 1 gpio.write(LEDR,gpio.HIGH) print("pressing") else if keyCnt >= 50 then print("---long pressed(ms):"..(keyCnt*100)) ...
nginx+nginx_lua实现WAF防护功能
Do one thing at a time, and do well.nginx_luanginx_lua模块是nginx的第三方模块,它可以将lua语言嵌入到nginx配置中,从而极大的扩展了nginx的能力,nginx以高并发而知名,而lua作为嵌入式语言轻便,两者的结合可以做到在nginx层就实现编程,而这里我们加入waf的lua过滤编程来实现waf。安装需要的程序包:nginxnginx_devel_kit(拓展nginx服务器核心功能的模块)lua-nginx-module(nginx_lua模块)nginx_lua_waf(waf策略 web应用防火墙)LuaJIT(c实现的lua解释器)LuaJIT下载网站:1234~]~]# tar xf LuaJIT-2.0.5.tar.gz~]# cd LuaJIT-2.0.5~]# make -j 2 && make installlib和include是直接放在/usr/local/lib和/usr/local/include设置环境变量(nginx编译时需要)12345~]# ~]# vim /etc/pro ...
基于 UGUI 、 toLua 的 LuaFramework
怎么做到热更新的
开始游戏时对比本地和服务器的files.txt,其中包含了每个AssetBundle的名字和MD5码,如果有文件不存在过MD5码不同则进行更新下载,进而实现更新内容。
个人理解
luaframework的好处:
不需要在Unity内考虑如何调用lua脚本
只需要完善相应panel界面以及Ctrl和Panel脚本即可
使用过程:
Unity项目标题栏LuaFramework根据项目平台进行Build
会有错误出现,无关紧要的错误注释即可
安装资源管理服务器,将StreamingAssets文件夹放入其中
配置AppConst.cs内容
UpdateMode(更新模式-默认关闭)、GameFrameRate(游戏帧频)、WebUrl(测试更新地址)
打开Sences/main场景,正常显示测试场景内容即可
将场景打包发布对应平台
在Unity中更改main场景中对应的panel
Unity标题栏LuaFramework选项根据对应项目平台重新进行Build
将StreamingAssets文件夹重新放入资源管理服务器
在模 ...
Lua中ipairs和pairs的区别与使用
<a href="/2015/11/11/lua_cpp_toluapp_tutorial/" rel="next" title="tolua++安装">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
tolua++安装
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item">
...
Style Transfer in Text Exploration and Evaluation
Abstract
2 main problems in Style Transfer:
Lack of parallel data
Model learn from non-parallel data
Learn separate content representations and style representations using adversarial networks.
Lack of reliable metrics
propose two novel evaluation metrics that measure two aspects of style transfer: transfer strength and content preservation
Contribution
Compose a dataset of paper-news titles to facilitate the research in language style transfer
Propose two general evaluation metrics for s ...
使用tengine DSO 来动态编译安装第三方模块(Lua
在使用nginx时,需要增加或者改动一个模块,都需要重新编译nginx文件。最近使用了tengine,它提供的DSO工具来动态加载模块。本例测试需要动态增加lua-nginx模块,记录一下安装过程。
1. 编译安装 luajit
Lua 环境推荐使用成熟快速的 luajit。
1
2
3
4
5
cd /root/Download/
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar zxvf LuaJIT-2.0.4.tar.gz
cd /root/Downloads/LuaJIT-2.0.4
make && make install PREFIX=/usr/local/luajit-2.0.4
2. 设置环境变量:
1
2
3
# tell nginx's build system where to find LuaJIT 2.0:
export LUAJIT_LIB=/usr/local/luajit-2.0.4/lib
export LUAJIT_INC=/usr/local/luajit-2 ...
Programming in Lua(Thrid Edition)笔记
17 Weak Tables and Finalizers第二部分的这后几章都不太好理解,作为第二部分的这最后一章尤其如此,看了至少有三遍才看明白,为了保证之后能看懂,这一章的笔记会加上不少自己的理解。
这章看完PiL第二部分也就学完,前两部分占了全书一半多一点,偏重语法和语言本身的特性,而后半部分偏重应用,打算在学后半部分之前写个小总结,说说这段时间学Lua的一些感想。
在Lua中有对象和引用的概念,一个对象不同于数字和字符串,包括table和线程等,一个对象的名字是对其的引用,创建一个对象并用一个变量承载后,将该变量赋值给另一个变量,这两个变量其实对同一个对象的引用,是相等的,不同对象的引用是不想等的。所以当一个对象没有引用时,它就变成了垃圾,Lua的垃圾自动回收机制会将其回收,释放占用的内存。但是当一个对象存储在table中并且没有了引用时,Lua不会将其视为垃圾,这时就需要用weak table来存储这些对象,所以weak table的设计宗旨是用来优化内存使用。
weak table用metatable中的__mode域来设定,值为字符串,"k"表示tab ...
Lua中table常用的四种遍历方式|qiuzhong's blog
第一种遍历方式:for key, value in ipairs(table) do end
注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面是否仍然是顺序的key。请看下面例子:
Sample_1:local tab1 = { [1] = 1, [2] = 2, [3] = 3, [4] = 4,} for key, value in ipairs(tab1) do print(value) -->1 2 3 4end
Sample_2:local tab2 = { [1] = 1, [2] = 2, [3] = 3, [5] = 5, [6] = 6,}for key, value in ipairs(tab2) do print(value) -->1 2 3end
Sample_3:local tab3 = { [2] = 2, [3] = 3, [4] = 4,} for key, value in ipairs(tab3) do print(value) -->没有打印end
第 ...
浅谈Lua协程 [ 奔跑的蜗牛 ]
撰写于 2018-05-09
<span id="post-title-updated">修改于 2018-05-10</span>
</p>
<p>很多脚本语言都有线程的概念,lua也不例外,但是lua的线程有点特殊,不能算作是真正的线程,叫做协程(coroutine),一般意义上的线程有如下特征:每个线程都有自己的堆栈;可以同时执行(多核);抢占式执行,无须手动唤醒。但是协程不一样。</p>
协程特点
有自己的的堆栈和局部变量
需要手动切换协程之间的执行
同一时刻只能有一个协程执行(无论是否是多核)
coroutine库
coroutine.create(f) 传递一个函数f,创建一个协程,返回协程句柄。
coroutine.isyieldable() 正在运行的协程是否可以让出,如果可以,返回true,只有主协程和C函数是无法让出的。
coroutine.resume(co, [val1,…]) 启动或者再次启动一个协程,由挂起状态(suspended ...