Mac上搭建lua环境并连接mysql
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。(以上摘抄自菜鸟教程)
鉴于Lua的诸多优势,我想在接下来的开发中应用Lua去完成一些需要脚本实现的工作。本文将记录我在Mac上搭建Lua的开发环境搭建以及实现对mysql的数据库访问。
1. Lua安装源码编译安装12345curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gztar zxf lua-5.3.0.tar.gzcd lua-5.3.0make macosx testmake install
由于mac的当前系统版本下,连root用户都无法在/usr目录下创建写文件,故需要到lua的Makefile文件中将所有需要创建到/usr目录下的文件改到本用户目录下,Makefile的部分配置信息如下:1234567INSTALL_TOP= /usr/localINSTALL_BIN= $(INSTALL_TOP)/binINSTALL_INC= $(INSTALL_TOP)/includeIN ...
lua全局变量的二三坑
lua全局变量的二三坑 | CloudKey Ocean
<meta name="keywords" content="ngx-lua,"/>
<link rel="icon" href="/favicon.ico"/>
<link rel="stylesheet" href="/css/personal-style.css"/>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.inser ...
情迁QQ机器人新功能可使用lua脚本编写机器人插件啦 · 情迁美好时光追忆
本文将详细介绍Lua机器人插件的使用方法,更详细的内容也可以参考简书哦!机器人1.9.0支持lua插件加载,支持手机端lua编写插件 机器人内置lua编辑器,可以测试,运行机器人功能,lua是一种脚本语言,解释运行,随意修改,无需编译,便于修改和分享,操作简单,开发成本低,传播更方便。
本文章转载自情迁简书 https://www.jianshu.com/p/92c7bf329653
说明目前支持机器人lua插件在2018年11月17日发布了,各位记得先情迁下载QQ机器人哈
本文章会慢慢补充,lua机器人插件能力将在情迁QQ机器人 1.8.8以及以上版本体现.
安装目录新建lua文件 也即是123### LUA语法介绍不懂lua语法的可以百度一下, 这里大概介绍一下基本的lua语法也就是和其它语言不相同的地方。字符串拼接用```..``` 数字转文本用```tostring(要转换的变量)
方法定义参数名 没有类型,这是脚本语言的特点,简单的不能再简单,如js,python php
123function 方法名(参数名)end
有返回值的方法
123function 方法名(参 ...
Lua入门教程:元表与元方法
Lua 语言中每中类型的值都有一套可预见的操作集合,比如可以将数字相加,将字符串连接,还可以在表中插入键值对。但我们却无法直接将两个表相加,无法对表进行直接比较,除非我们使用元表。元表可以修改一个值在面对未知操作时的行为。例如,我们对两个表 a 和 b 执行 a + b 操作,Lua 在试图将两个表相加时,会检查其中某个表是否含有元表(metatable),且元表中是否含有 __add 字段,如果 Lua 找到该字段,则调用该字段对应的值,这就是所有的元方法(metamethod)。
在元表中每个元方法的键的命名都是一个双下划线(__)加事件名的,键关联的那些值被称为元方法。上面说的 _add 就是元方法键名称,而对应的元方法值是执行加操作的函数。
获取与设置元表在 Lua 中每个值都可以有元表,而元表只是一个普通的Lua表。每个表和用户数据类型都具有各自独立的元表,而其他类型的值则共享对于类型所属的同一个元表。我们可以使用 getmetatable 获取一个表的元表,注意,刚创建的新表是没有元表的:
12t = {}print(getmetatable(t))
另外,我们可以使用 ...
python dictionary lua table
python dictionary 与 lua table
公司前端的技术栈是 C++ & lua & python, C++、lua做业务开发,python做工具。lua特别好用的东西就是load, 将某些数据(一般是excel)转成lua的table存储,用的时候直接load进来。但是,有些数据,并不是excel转过来的,通过多个excel来组成。
例如:描述: 一个卡牌游戏,肯定有一张卡牌表,在表中我可以知道每张卡牌属于哪个职业。
Question: 在游戏中,我想知道某职业所有卡牌,怎么办呢?我需要遍历这个卡牌表,然后把相应职业的卡牌筛选出来。但是,这个方法随着卡牌库的增加,所花费的时间也不断增加,早晚会出事呀。当然,可以通过各种人为规定,算法设计来加快速度。可是,都没有根本去解决问题。回过头来,可以发现,当我们有了这张卡牌表,我就可以知道某职业都有哪些牌。这就是像卡牌表一样,不需要在游戏中动态去生成,直接可以本地存储静态的一个职业对应卡牌的表。这样,即使生成这张表再慢,也不会消耗游戏运行中的时间和性能。
解决问题分析现在目标很明确了,我要把n个表,根据需求 ...
lua脚本操作redis数据库介绍
前言 为什么要用lua脚本操作redis数据库?1.减少开销—减少向redis服务器的请求次数2.原子操作—redis将lua脚本作为一个原子执行3.可复用—其他客户端可以使用已经执行过的lua脚本4.增加redis灵活性—lua脚本可以帮助redis做更多的事情
lua脚本本身体积小,启动速度快.
因此,从redis 2.6.0开始,redis在服务器端内置lua解释器
EVAL命令语法EVAL script numkeys key [key …] arg [arg …]
EVAL —-lua程序的运行环境上下文script —-lua脚本numkeys —-参数的个数(key的个数)key —-redis键 访问下标从1开始,例如:KEYS[1]arg —-redis键的附加参数
lua脚本EVAL和EVALSHA用redis内置的lua编译器执行脚本举例说明:123456127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 username password test ...
Lua 排序算法
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
算法步骤
有一个长度为n的序列,一共需要n次外循环
在一次外循环里,比较相邻的元素。如果第一个比第二个大,就交换他们两个。这样可以保证,每次外循环结束,最右边的元素一定是最大的数。
由于每一次外循环都可以确定一个最大的数,所以在一个外循环里一共需要比较n-i次内循环
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
动画演示
Lua 实现
local function bubbleSort(arr)
for i = 1, #arr, 1 do
for j = 1, #arr - i, 1 do
if arr[j] > arr[j+1] then
arr ...
Lua Table Parser
PyLuaTblParser类中有两个私有变量:
self.str_praser是类LuaStrParser的实例,用来实现lua字符串的解析。
self.lua_table是一个dict或者list,用来储存从lua table字符串或者其他dict中读取的数据。
接口1234567891011121314151617181920212223def (self, s):读取Lua table数据,输入s为一个符合Lua table定义的字符串,无返回值遇到Lua table格式错误则抛出异常def dump(self):根据类中数据返回Lua table字符串def loadLuaTable(self, f):从文件中读取Lua table字符串,f为文件路径,遇到Lua Table的格式错误则抛出异常,文件操作失败抛出异常def dumpLuaTable(self, f):将类中的内容以Lua table格式存入文件,f为文件路径,文件若存在则覆盖,文件操作失败抛出异常def loadDict(self, d):读取dict中的数据,存入类中,只处理数字和字符串两种类型的key ...
Lua GC 参数的含义
lua实现了简单的incremental mark-and-sweep collector,有两个参数会影响GC的工作方式:pause和step multiplier。
概念
GC完整地清理一次内存的过程(“full gc”或”cycle”)由”标记内存是否垃圾”(mark)和”释放垃圾内存”(sweep“)两个阶段构成。一个cycle的开销通常比较大,理想情况下应该分割成多个开销较小的step。lua的GC引入一个变量debt,用以分割step,单位和内存是等比例的。如果debt是无穷大,一个step就会完成一个cycle的工作。debt<=0时,GC停止工作。分配内存时debt会等比例的增大。在mark过程中,每标记一个正在使用的object,就会根据这个object的大小从debt减去一个等比例的数值。在sweep过程中,每释放一个object,就会根据这个object的大小从debt减去一个等比例的数值。在一个cycle完成后,GC会根据当前使用的内存和pause的值计算一个新的debt。
数量关系
声明以下变量:
TotalMemory: Lua占用的内存。
...
Lua + OpenResty修改response body
最近公司前端框架组提了个需求,希望修改response中的一个css文件,去掉一个样式:max-width:1632px;。于是便想到了利用lua。
OpenResty lua编程相关资料
OpenResty Readme
OpenResty最佳实践
其中Readme要看完,是github上对OpenResty的lua-nginx-module比较全面的介绍。
Nginx处理的几个阶段此处放上从网上找来的一幅图,我这里修改response body显然是需要用到body_filter_by_lua*指令。
修改Response Body修改Response Body的方式总体来说有4种,分别是:
1.使用 body_filter_by_lua指令来实现:http://wiki.nginx.org/HttpLuaModule#body_filter_by_lua 这个支持流式处理。
2.使用 ngx.location.capture 发起子请求,然后对子请求的响应体进行全缓冲式修改
3.可以使用 ngx_replace_filter 模块来进行流式正则替换替换成的目标值可以通 ...