LUA - 技术教程文章

第四章 Lua模块开发

在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发;而且模块化是高性能Lua应用的关键。使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享;另外注意之前我们使用init_by_lua中初始化的全局变量是每请求复制一个;如果想在多个Worker进程间共享数据可以...

Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses【代码】

【题目链接】 http://codeforces.com/problemset/problem/741/B 【题目大意】  给出一张图,所有连通块构成分组,每个点有价值和代价,   要么选择整个连通块,要么只能在连通块中选择一个,或者不选,为最大价值 【题解】  首先我们用并查集求出连通块,然后对连通块进行分组背包即可。 【代码】#include <cstdio> #include <vector> #include <algorithm> #include <cstring> #define rep(i,n) for(int i=1;i<=n;i++) u...

LuaJit转义的问题【图】

之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对。在很多语言中,正则的转义字符是“\”,但在lua中却不是,至少标准的不是。引号,使用“\”进行转义,跟字符串定义类似local s = “\"Hello World!\””=> 输出 “Hello World!” - 带双引号 其它字符如特殊的字符(被称为魔法字符):( ) . % + – * ? [ ] ^ $,想匹配这些字符...

《Programming in Lua 3》读书笔记(二十六)

日期:2014.8.12PartⅣ The C API 30 Managing Resources 上一节中实现的自定义类型,我们并没有关注于资源管理的问题。上一节实现的数组是需要关心内存问题,而这些问题由Lua实现管理。但是很多时候事情不那么简单,有些对象不仅需要内存空间,还会需要如窗口句柄、文件描述等资源。尽管说这些也是内存开销,但是这些资源是由系统的其他组件管理的。这种情况下,当一个对象被回收了,我们也需要合适的机制来实现回收这些额外的...

一款lua点方法与冒号方法相互转换工具【图】

工具地址在这里。Q:为什么做一款这么看似无用的工具?A:项目开发所用框架地址https://github.com/zhang00lei/jetbrains_myLuaTools,公司同事期望代码风格能与框架保持一致,如下这种风格。但是这种风格的代码对Emmylua简直太不友好,Emmylua提供的注解,代码提示,自动补全等功能,完全不能很好的使用,于是就做了这样一款工具,它能够很好的将点方法与冒号方法互相转换,也能够很好的格式化、检查相关代码。如果你有相似的需求...

Lua和Javascript差异对比【代码】

Lua模拟器js方案1.语法级模拟lua与js语言差异1.1注释 js 为//,lua为--.1.2变量js利用val来声明全局变量不存在局部变量,lua则不需要直接定位则为全局变量,local声明则为局部变量。1.3运算符js + - * / % ++ --= += -= *= /= %=支持字符串 +txt1 = "what a very";txt2 = "nice day";txt3 =txt1 " " +txt2;打印txt3输出结果为"what a very nice day".规则:把数字与字符串相加,结果将成为字符串.lua二元:+ - * / ^ %一元:-(负号)lua...

详解Lua中的变量相关知识点

变量不过是存储到区域项目可以操作的名称。它可以容纳不同类型的值,包括函数和表格。变量名可以由字母,数字和下划线。它必须以字母或下划线。大写和小写字母是不同的,因为Lua是区分大小写的。有八种基本类型值在Lua中:在Lua,尽管我们没有变量的数据类型,我们基于该变量范围的三种类型。 全局变量:所有的变量默是全局除非显式地声明为局部。 局部变量:当类型被指定为局部的一个变量,它的范围是有限的在自己的范围内使...

windows & mac 安装lua

mac从源码编译安装是最方便的,lua源码不足两万行,编译几秒钟的事。打开terminal,依次输入以下命令:curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gztar zxf lua-5.2.3.tar.gzcd lua-5.2.3make macosx testsudo make install (该命令后需要输入开机密码) 这样lua就安装到/usr/local/bin 目录下了windows下可以安装 luaforwindows ,它集成了很多第三方库,不过lua不是最新的版本。 要安装最新的lua,可以下载lua的二进...

lua学习笔记11:lua中的小技巧

lua中的小技巧,即基础lua语言本身的特种,进行一个些简化的操作一 巧用or x = x or v等价于:if not x thenx = v end 如果x为nil或false,就给他赋值为 二 三元运算符实现a and b or c 类似C语言: a ? b : c and 的运算由优先级高于or原文:http://blog.csdn.net/xufeng0991/article/details/38694181

对lua中__newindex的理解【图】

阅读了文章后用流程图来总结一下 __newindex的规则:a.如果__newindex是一个函数,则在给table不存在的字段赋值时,会调用这个函数。b.如果__newindex是一个table,则在给table不存在的字段赋值时,会直接给__newindex的table赋值。应用:1.__newindex是一个function时,可用来控制一个表中不存在的字段的赋值行为,例如当不希望子类覆盖父类方法或者修改父类成员时,可以对子类__newindex进行修改。2.保护__index里面的元素不被修...

nginx+lua+redis构建高并发应用

ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求。url请求nginx服务器,然后lua查询redis,返回json数据。一.安装lua-nginx-module参见《LNMLGC》架构二.安装redis2-nginx-module模块get https://github.com/openresty/echo-nginx-module get https://github.com/openresty/redis2-nginx-module get https://github.com/agentzh/set-misc-nginx-module.git # ./configure --prefix=/usr/local/nginx ...

用lua扩展你的Nginx(整理)

首先得声明,这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了,按风格应该是属于章亦春的文章。整理花了不少时间,所以就暂写成原创吧。一. 概述Nginx是一个高性能,支持高并发的,轻量级的web服务器。目前,Apache依然web服务器中的老大,但是在全球前1000大的web服务器中,Nginx的份额为22.4%。Nginx采用模块化的架构,官方版本的Nginx中大部分功能都是通过模块方式提供的,比如Http模块、Mail模块等。通过开发...

lua相关库安装常见问题【代码】【图】

一、先安装luabrew install lua我本机的安装路径为:/usr/local/Cellar/lua/5.3.4_2二、安装luarocks下载luarocks的安装包:http://luarocks.github.io/luarocks/releases/luarocks-2.4.3.tar.gz解压后到安装包的目录下执行如下命令(可以自行根据自己的lua版本号进行修改):./configure --with-lua=/usr/local/Cellar/lua/5.3.4_2 --with-lua-include=/usr/local/Cellar/lua/5.3.4_2/includemake make install安装完成参考链接...

如何在Lua与C/C++之间实现table数据的交换【代码】

之前在《C/C++和Lua是如何进行通信的?》一文中简单的介绍了lua与宿主之间的通信。简单的说两种不同的语言之间数据类型不一样又如何进行数据交换呢?那就是lua_State虚拟栈,通过栈操作和lua库函数,我们很轻松就能完成两者之间的数据交换。  开始之前,明确几个问题,lua中的虚拟栈的索引编号问题(我们假设栈大小为n),编号1是栈底,n视栈顶,编号-1是栈顶,-n是栈底。lua中的库函数需要访问和操作栈上的数据都是通过索引编号...

C# 编译JS -Evaluator【代码】

忘记哪里转过来的,自己mark一下//// <summary>/// 动态求值 ///</summary>publicclass Evaluator { ///<summary>/// 计算结果,如果表达式出错则抛出异常 ///</summary>///<param name="statement">表达式,如"1+2+3+4"</param>///<returns>结果</returns>publicstaticobject Eval(string statement) { return _evaluatorType.InvokeMember("Eval", BindingFlags.InvokeMethod, null, _evaluator, newobject[] { statement }); } st...

Nginx 使用Lua脚本【代码】

安装 Nginx Lua支持安装系统依赖库yum install readline-devel pcre-devel openssl-devel gcc 安装LuaJIT$ wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz $ tar zxvf LuaJIT-2.0.5.tar.gz $ cd LuaJIT-2.0.5 $ make install # 安装成功 ==== Successfully installed LuaJIT 2.0.5 to /usr/local ==== 设置LuaJIT环境变量$ export LUAJIT_LIB=/usr/local/lib $ export LUAJIT_INC=/usr/local/include/luajit-2.0 $ echo "/u...

Evaluate Reverse Polish Notation

仅提供个人的一种解题思路,未必是最优,仅供各位参考!import java.util.Stack;/*** * <p>* ClassName SolutionEvaluateReversePolishNotation* </p>* <p>* Description 该题是解逆波兰表达式 Evaluate the value of an arithmetic expression in Reverse Polish Notation.* * Valid operators are +, -, *, /. Each operand may be an integer or another expression.* * Some examples: ["2", "1", "+", "3", "*"] -> ((2 + 1) ...

Lua环境搭建【代码】

作者:zhanhailiang 日期:2014-12-06 1. 下载Lua for Windows并安装; 2. Sublime配置编译环境:{"cmd":["lua","$file"],"file_regex":"^(?:lua:)?[\t ](...*?):([0-9]*):?([0-9]*)","selector":"source.lua","encoding":"utf-8"} 保存到:..\Sublime Text 2\Packages\User\lua.sublime-build 3. 测试:local obj ={1}, i;for key, value inpairs(obj)doprint(key, value);end --[[lua 数组索引并不是按传统的0开始计数,而是从...

Lua性能优化技巧(三):关于表

一般情况下,你不需要知道Lua实现表的细节,就可以使用它。实际上,Lua花了很多功夫来隐藏内部的实现细节。但是,实现细节揭示了表操作的性能开销情况。因此,要优化使用表的程序(这里特指Lua程序),了解一些表的实现细节是很有好处的。Lua的表的实现使用了一些很聪明的算法。每个Lua表的内部包含两个部分:数组部分和哈希部分。数组部分以从1到一个特定的n之间的整数作为键来保存元素(我们稍后即将讨论这个n是如何计算出来的)...

Lua快速入门【图】

Lua 是一个小巧的脚本语言,可以直接使用解析器进行解析。设计目的是为了嵌入应用程序中,从而为应用提供灵活的扩展和定制功能。Lua 由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,所以Lua 不适合作为开发独立应用程序语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的及时编译功能。Lua 不仅可以作为扩展脚本被其他代码调用,也可以作为普通的配置文件,代替XML,ini等文件格式,并...

lua函数【代码】

https://www.cnblogs.com/chuanwei-zhang/p/4077247.htmlhttps://www.cnblogs.com/sifenkesi/p/3876745.htmlhttps://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html1.lua_gettablevoid lua_gettable (lua_State *L, int index);把t[k] 值压入堆栈,这里的 t 是指有效索引 index 指向的值,而 k 则是栈顶放的值。这个函数会弹出堆栈上的 key,把结果放在栈上相同位置。// 将一个key放到栈顶,这个key为1。如果你的key是字...

Lua中获取table长度问题探讨

又有同事在lua的table长度问题上犯错了,我们一起来看看吧~~~看以下代码:复制代码 代码如下: local tblTest1 = { 1, 2, 3 } print(table.getn(tblTest1)) 这段代码输出的结果是3,这个大家都知道,是吧。不管最后那个3后面有没有加逗号,结果都是3。 再看下面的代码:复制代码 代码如下: local tblTest2 = { 1, a = 2, 3, } print(table.getn(tblTest2)) 这段代码输出...

nginx使用lua waf防火墙来做防CC配置【代码】【图】

nginx添加lua模块启动和安装nginxyum install -y nginx systemctl daemon-reload systemctl enable nginx #为了实验方便这里就直接yum安装了,配置了开机启动注意:出现报错 [root@wh02 ~]# useradd nginx -M -s /sbin/nologin useradd: cannot open /etc/shadow 表示 你曾经锁定了/etc/shadow 文件#添加nginx系统启动: vim /usr/lib/systemd/system/nginx.service 添加以下内容: #---------------------------------------------...

Lua function函数,可变参数, 局部函数,尾递归优化【图】

在Lua中,函数是作为"第一类值"(First-Class Value),这表示函数可以存储在变量中,可以通过参数传递给其他函数,或者作为函数的返回值(类比C/C++中的函数指针),这种特性使Lua具有极大的灵活性。 Lua对函数式编程提供了良好的支持,可以支持嵌套函数。 另外,Lua既可以调用Lua编写的函数,还可以调用C语言编写的函数(Lua所有的标准库都是C语言写的)。 定义一个函数function hello()print(‘hello‘)end hello函数不接收...

cocos2d-x lua 中使用protobuf并对http进行处理

cocos2d-x lua 中使用protobuf并对http进行处理本博客链接http://blog.csdn.net/vpingchangxin/article/details/24458051protobuf Google的一个很好用的传输数据的封装 说实话Google的东西确实比较好用 所以我们前后端数据交换就用他了 不过Google没有对lua进行支持 还好社区有开源的大侠们贡献 找了所有关于lua protobuf 我只找到 云风的 pbc 修改相关cocos2d-x中的类可以正常使用。protoc-gen-lua 我在使用的时候 总是报截断数据...

WRK的使用-lua脚本POST请求(静态数据)

HTTP_prot = { "/gateway/services", "/gateway/services", } --接口类型HTTP_type = { "POST", "POST", } --参数HTTP_body = { ‘{"phone": "19012000335"}‘, ‘{"phone": "19012000335","code": "1569"}‘, -- 双中括号里面不转译}-----------如果有多个接口,名称、类型、参数必须按照相同的顺序。math.randomseed(os.time()) function changeData(tal,order) local body = stri...

【Unity游戏开发】tolua之wrap文件的原理与使用【代码】【图】

本文内容转载自:https://www.cnblogs.com/blueberryzzz/p/9672342.html 。非常感谢原作者慷慨地授权转载,比心!@blueberryzzz 是位大神,欢迎大家关注他的博客。马三对原文的排版与结构做了微调,以便更合适阅读。一、什么是wrap文件  每个wrap文件都是对一个c#类的包装,在lua中,通过对wrap类中的函数调用,间接的对c#实例进行操作。二、wrap类文件生成和使用的总体流程 三、生成一个wrap文件的流程  这部分主要通过分析类...

lua教程

Mac 上也可以通过 homebrew 安装,便于版本管理。brew install lua lua-基础语法-- 注释-- [[]] -- 多行注释, 如果临时取消多行注释,只需要在头部"--" 改为 "---"即可下划线加大写字母为关键字变量缺省为nil,删除变量给其赋值nil即可交互式编程&脚本式编程(执行式脚本要加解释器-#!/usr/local/bin/lua), 通过 Ctrl+D(发送退出信号),Ctrl+C(强制中断)退出;或通过 os.exit()退出lua-数据类型nil -- 没有任何有效值,只有...

SAP 预制发票报错 -Material 20000000 D119223073 in valuation area VNSM has inconsistant ML data- 之对策

SAP 预制发票报错 -Material 20000000 D119223073 in valuation area VNSM has inconsistant ML data- 之对策 业务人员报对于PO 号码4500000191使用MIR7 做预制发票,系统报错: 详细报错信息,Material 20000000 D119223073 in valuation area VNSM has inconsistant ML dataMessage no. C+704DiagnosisThe material ledger data for material 20000000 with valuation type D119223073 in valuation area VNSM is inconsistent....

使用jedis执行lua脚本【代码】

转:redis学习(十五) 使用jedis执行lua脚本(实现一个对IP的限流)2018年09月15日 20:07:26 码农-文若书生阅读数:1609 使用jedis执行lua脚本(实现一个对IP的限流)上一篇学习了怎么安装lua,这一篇学习编写一个lua脚本用jedis执行,实现对一个IP的限流LUA脚本如下,第一次使用incr对KEY(某个IP作为KEY)加一,如果是第一次访问,使用expire设置一个超时时间,这个超时时间作为Value第一个参数传入,如果现在递增的数目大于输入的第...