Lua
读书笔记: Programming in Lua, 4th Edition.
Account = {
balance = 0,
withdraw = function(self, v)
self.balance = self.balance - v
end
}
function Account:deposit(v)
self.balance = self.balance + v
end
– 用.来调用函数的话,需要手动给self传值。
– 用冒号来调用函数的话,可以省略self。
Account.deposit(Account, 200)
Account:deposit(200)
Account.withdraw(Account, 100)
Account:withdraw(100)
在上面的例子中,Account只是一个对象实例。
在C++中,一个类,可以生成多个对象实例。
在Lua中,没有类的概念,Lua是用metatable来模拟实现类的。
Classes
if we have two objects A and B, ...
lua学习笔记
<p>lua是一门轻量级的脚本语言…好像比较适合写游戏?在 <a href="https://github.com/Mogara/QSanguosha">太阳神三国杀</a> 中见过很多lua脚本。 由于<a href="https://splash.readthedocs.io/en/stable/scripting-tutorial.html">splash</a> 的渲染脚本需要用lua来写,因此来学习一波。</p>
直接上语法…看到了python和pascal的影子orz
-- Two dashes start a one-line comment.
–[[
Adding two ['s and ]'s makes it a
multi-line comment.
–]]
– 1. Variables and flow control.
num = 42 – All numbers are doubles.
– Don't freak ...
nginx和lua的简单使用
OpenResty 是一款基于 NGINX 和 LuaJIT 的 Web 平台
一、安装环境
根据官网教程,macos我们只需要一行命令就可以开心的安装openresty (brew install openresty/brew/openresty)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601 ...
Redis Lua脚本小学教程
Redis提供了丰富的指令集,但是仍然不能满足所有场景,在一些特定场景下,需要自定义一些指定来完成某些功能。因此,Redis提供了Lua脚本支持,用户可以自己编写脚本来实现想要的功能。
什么是Lua?Lua是一种功能强大的,高效,轻量级,可嵌入的脚本语言。它是动态类型语言,通过使用基于寄存器的虚拟机解释字节码运行,并具有增量垃圾收集的自动内存管理,是配置,脚本和快速原型设计的最佳选择。
Redis怎么执行Lua脚本EVAL命令Redis中可以使用EVAL命令执行相应的Lua脚本
12> EVAL 'local val="Hello Jackey" return val' 0"Hello Jackey"
你可以像这样在交互模式下执行Lua脚本,这样更方便处理错误。只是这样还不够,有时候,我们需要给Lua脚本传入一些参数。细心的同学一定注意到了,脚本的后面还有一个数字0,它的意思的不传入参数。
那怎么传参数呢?
12> EVAL 'local val=KEYS[1] return val.." "..ARG ...
Lua语法速记
基础语法速记
单行注释 --
多行注释 —[[]]—
数据类型,nil、boolean、number、string、、table、function、userdata和thread
不等于,~=
逻辑运算符,and,or,not
分支结构if else 分支结构1234567891011score = 60if (score >= 80) then4print("优秀")elseif (score >= 70) then4print("良好")elseif (score >= 60) then4print("及格")else4print("不及格")end
Tips
if 后面都有一个 then
elseif 之间没有空格
循环结构for 循环123for i=0, 10, 1 do4print(i)end
Tips
用逗号(,)
条件判断,小于等于10
Lua 只有 break,没有 continue
While 循环当条件满足时,执行循环
12345temp = 10while (temp > ...
IronLua 主页
Lua 5.3 实现
AOT方式实现 Lua/Unity 绑定
多平台支持: iOS, Android, Windows, Mac, Linux
编辑器集成
为什么选择IronLua在Unity平台上开发游戏
快速开发游戏逻辑
Unity平台最快的Lua实现
Unity平台唯一靠谱的全平台自动更新(DLC)解决方案
原生多平台网络库,比更快还快:Windows(iocp), Linux(epoll), Android(epoll), iOS(kqueue)
c#/lua交互性能
抛弃慢如蜗牛的c#反射调用, 我们使用高大上的 AOT 编译技术:
方法调用比NLUA快2倍以上
属性读写比NLUA快100倍以上
DLC解决方案
AssetBundle + IronLua 相信你能很快搞出靠谱的DLC解决方案
下个版本IronLua将直接集成完整DLC解决方案
购买与下载
个人用户请到 Unity商店 购买下载
...
OpenResty Lua学习笔记
由于公司C端业务的 Nginx 框架使用的是OpenResty。在上一篇文章学习了 Nginx 基础知识后,决定再学习一下 Lua 和 OpenResty。本文记录了自己学习过程中的一些笔记和总结,尝试了OpenResty在本地搭建简单的API Server框架的demo,包括处理接口路由以及操作 Redis 的的流程。通过学习,未将来可能涉及到OpenResty的开发做一些准备。
LuaLua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 所组成并于 1993 年开发。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 由标准 C 编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua 并没有提供强大的库,这是由它的定位决定的。所以 Lua 不适合作为开发独立应用程序的语言。Lua 有一个同时进 ...
C# 使用 Lua 取得 Redis 自訂複雜型別
C# 使用 Lua 取得 Redis 自訂複雜型別
之前筆記 在 Redis 中使用 Lua 的 Dictionary 紀錄到在 Redis 中使用 Lua 時可以如何模擬並使用 Dictionary,而筆記最後也提到透過這樣的方式處理時,Lua 的回傳值會不如預期,所以今天要來紀錄個人的做法,但我無法確定是不是最好的方法 XD,有錯請大家指教了
基本環境說明
macOS Catalina 10.15.1
.NET Core SDK 3.1.100
redis-cli 5.0.5
NuGet packages
StackExchange.Redis 2.0.601
Newtonsoft.Json 12.0.3
MessagePack 1.8.80
測試用 model
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public string Email { get; set ...
Lua语言学习(二)
<p><strong>接下来的几篇是根据<a href="http://lua-users.org/wiki/TutorialDirectory"> Lua-Users wiki </a>梳理的一些细节</strong></p>
赋值
> i = 7
> i, x = i + 1, i
> print(i, x)
8 7
Lua 会先计算等号右侧的 i + 1 和 i 的值,然后第二行就变成了i, x = 8, 7,然后从右向左分配,x = 7,i = 8
关于从右向左分配可以看下面这个例子:
> a, a = 1, 2
> print(a)
1
Lua 会从右向左,先执行 a = 2,再执行 a = 1,所以最终 a 的值是1
Number
Lua 不像其他高级语言有各种 Number 类型,默认只有双精度浮点型
把字符串转换成数字可以用 tonumber() 函数:
> = tonumber("123") + 4
1 ...
lua快速入门
概览:协同程序提供了一种协作式的多线程。每个协同程序都等于是一个线程。一对yield-resume可以将执行权在不同线程间切换。然而与常规多线程不同,协程是非抢先式的。
参照书籍:《Lua程序设计(第二版)》
Lua版本:Lua 5.3.5
协同程序
Lua将所有关于协同程序的函数放在了一个名叫”coroutine“的table中。
create函数用于创建一个协同程序,只有一个参数,为一个函数。最终返回一个thread类型的值。
> co = coroutine.create(function() print"hi" end)
> print(co)
thread: 000000000078eba8
一个协同程序有四种状态:挂起(suspended)、运行(running)、死亡(dead)和正常(normal).创建一个协同程序后它将储于挂起状态,可以使用status函数来检查协同程序的状态。
> print(coroutine.status(co))
suspended
使用resume函数 ...


