LUA - 技术教程文章

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.Note:Division between two integers should truncate toward zero.The given RPN expression is always valid. That means the expression would always evaluate to a result and there won‘t be any divide by zero operation.Example 1:Input: ...

Lua与C++交互初探之Lua调用C++【代码】【图】

Lua与C++交互初探之Lua调用C++上一篇我们已经成功将Lua的运行环境搭建了起来,也成功在C++里调用了Lua函数。今天我来讲解一下如何在Lua里调用C++函数。Lua作为一个轻量级脚本语言,他只包含了一些必要的系统库函数,当有需要时还得自己去写。有一次我要做一个两数异或的操作发现函数库里居然没有异或运算。不得不非常苦逼的自己去写。后来接触Lua深了之后才知道将这种"缺陷"可以由C函数来弥补。但要做到这一点对于一个对C只知道if ...

redis lua script 相关

脚本的执行是原子性的,当某个脚本正在运行的时候,不会有其他脚本或redis命令被执行。 这意味着运行一个缓慢的脚本并不是一个好主意,当运行脚本时,其他的客户端会认为服务器忙。 共有6个lua脚本相关的命令: 1. eval 可以对输入的脚本求值: EVAL script numkeys key [key ...] arg [arg ...] numkeys 参数用于指定键名参数的个数,键名参数key[key...] 从 EVAL 的第三个参数开始算起,表示在脚本中所...

简介Lua脚本与Redis数据库的结合使用

可能你已经听说过Redis 中嵌入了脚本语言,但是你还没有亲自去尝试吧? 这个入门教程会让你学会在你的Redis 服务器上使用强大的lua语言。 Hello, Lua!我们的第一个Redis Lua 脚本仅仅返回一个字符串,而不会去与redis 以任何有意义的方式交互。复制代码 代码如下:local msg = "Hello, world!" return msg这是非常简单的,第一行代码定义了一个本地变量msg存储我们的信息, 第二行代码表示 从redis 服务端返回msg的值给客户端。 保...

lua基础篇(二)

元表 metatable:(元表)一组元操作(元方法)的集合; __index:元方法之一,作用:定义了新的索引操作; ????若索引表中没有的key,会去查找表的元方法,即metatable中的__index方法(也可以是另一个表) ????原型:__index = fuunction(table,key) ????????????????--此处的table为调用该元方法的 ????????????if type(key) == "number" then ????????????????print("the key‘s value is nil!"); ????????????end ????????end ???? __newin...

lua--从小白开始(1)

最近在看lua,觉得很有趣,发现没有最新版本的例子,所以自己就别人的博客里弄了源码,然后改成最新版本的lua C API.关于lua非常基础的就不介绍了,咱们就从简单的测试开始吧。在此之前如果没有搭好lua在win32下的环境,请看博客:http://blog.csdn.net/xv_ly15/article/details/85487331.C/C++执行lua脚本源码博客链接:http://blog.csdn.net/pizi0475/article/details/5398504我只是用改用了最新的lua的C API。不多说,直接上代码...

Torch-RNN运行过程中的坑 [1](读取Lua非空table,size为0)【代码】

0、踩坑背景执行Torch-RNN的时候,在LanguageModel.lua中的encode_string函数中,对start_text的各个character进行id映射编码,实现功能类似“北京天安门”-->“5 10 88 32 111”,方便后面的计算。这个函数会利用一个全局的类似HashMap的table,hashmap中的key是character(char),value是id(int),涉及到一个从hashmap中按照key取值的操作,代码如下:local idx = self.token_to_idx[token] assert(idx ~= nil, ‘Got invalid idx...

lua 之 and or not【图】

and是与运算,返回值如下   如果前者为false或者nil,则返回前者,否则后者A and B类似如下语句if not A thenreturn Aelsereturn Bend 总结:and运算只要前者不为false或者nil ,均返回后者运行截图:-------------------------------------------------------or是或运算,返回值如下:  如果前者为真返回前者,否则返回后者A or B相当于以下代码if A thenreturn Aelsereturn Bend 总结:or运算,只要前者不是false或者nil,就...

为什么RPP比lua更适合做脚本语言?

1.RPP以静态类型为主,最终的效率肯定比动态类型的lua要高,并且不会引起GC停顿。(目前与luaJIT性能接近)2.RPP没有GC(自动垃圾回收),与C/C++互相调用简单直接,而且他们共享进程内存空间,RPP变量和C++变量生命周期相同,不会出现像lua一样的这里变量已经GC了那边还在使用。3.RPP目前兼容50%的C++语法,70%的C语法,因此它天生就更亲近C++系的语法,所以C++程序员几乎无需学习即可使用。4.RPP支持指针和内联汇编,底层操作更方...

java翻译lua+c+openssl签名项目【代码】

原来项目中用openresty nginx+lua实现server,lua调用c动态链接库,来使用openss做签名,并生成130字节(128签名+2位自定义字节)长度的文件。nginx:location /get/key {content_by_lua_file ‘/data/www/sign.lua‘;}sign.lualocal ffi = require "ffi" --动态链接gen_sig_ex_x.c,load("")名字规则,lib***.so local gs = ffi.load("sin")ffi.cdef[[int gen_main(char *param,unsigned char *signature) ]]local param_ = ngx.var....

Lua 计算两个GPS坐标点之间的距离

local EARTH_RADIUS = 6378.137local function rad(d)  return d * math.pi / 180.0endlocal function getDistance(lat1,lng1,lat2,lng2)   local radLat1 = rad(lat1)   local radLat2 = rad(lat2)   local a = radLat1 - radLat2   local b = rad(lng1) - rad(lng2)   local s = 2 * math.asin(math.sqrt(math.pow(math.sin(a/2),2) +   math.cos(radLat1)*math.cos(radLat2)*math.pow(math.sin(b/2),2)))...

通过lua将nginx请求状态码转变为自定义状态码【代码】

背景:安全组同学使用固定user-agent去扫描我们的网站,造成告警误报,需要将相关扫描资源的状态码修改,避免无效告警思路:在nginx请求的header_filter_by_lua阶段,将请求状态码修改为自定义状态码直接上代码,将以下代码写入配置文件xxx.lua,在相对应的域名下引用就可以了:header_filter_by_lua_file "xxx.lua";local log_time = os.date("%Y-%m-%d %X",os.time()) local ngx_lua_ua_log = "/data/nginx/log/sec.lua.log" local ...

luasocket系列: luasocket tcp【图】

luasocket 拓展库提供了tcp 模块,该模块提供一些操作,非常简单.但是不知道为什么源代码中的例子有错误.简单写了一个luasocket tcp 协议的例子,代码如下:tcpsample.lua 代码:--绑定地址和端口号 host = host or "127.0.0.1" port = port or 8080 --创建tcp对象,方式和udp创建类似,通过metatable 设置类方法 tcp =socket.tcp() --绑定地址和端口号到指定tcp对象上 e=tcp:bind(host, port) if(e and e==1)thenprint("Binding to host...

leetcode 150. Evaluate Reverse Polish Notation ------ java【代码】

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) * 3) -> 9["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 就是求逆波兰表达式(后续遍历)的结果。1、直接求解,很慢publicclass Solution {publicint evalRPN(String[] tokens) {int len = tok...

使用cocos2d脚本生成lua绑定

这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口。因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下这篇先说一下cocos2d生成lua绑定的修改,有空的话再写一篇lua中注册回调到c++中方法 我的目录结构假设我的目录名称是DragonBones-Cocosdx目录-DragonBones -c代码-c代码头-tools db_DragonBones.inigenbindings.py-scripting 这个目录是用来存放自动生成的文件...

SLua【代码】

安装  1.下载最新版,将Assets目录里的所有内容复制到工程中,对于最终产品,可以删除例子,文档等内容,如果是开发阶段则无所谓。  2.等待unity编译完毕,如果一切顺利的话,将出现SLua菜单,点击SLua菜单中All->Make命令,手动生成针对当前版本的U3d接口文件。  3.每次更新SLua版本,务必记得All->Clear,然后All->Make,否则可能运行不正确。 LuaState状态机对象执行Lua字符串using UnityEngine; using System.Collection...

lua中,两种json和table互转方法的效率比较【代码】

lua中json和table的互转,是我们在平时开发过程中经常用到的。比如:在用lua编写的服务器中,如果客户端发送json格式的数据,那么在lua处理业务逻辑的时候,必然需要转换成lua自己的数据结构,如table。此时,就会用到table和json格式的互转。在用lua编写的服务器中,如果我们通过redis来存储数据,由于redis中不存在table这种数据结构,因此,我们可以选择将table转换成json字符串来进行存储。在数据的存取过程中,也会用到table和...

【Linux学习之旅】之Ubuntu 14.04下的Wireshark出现Wireshark - Lua: Error during loading...【代码】【图】

Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user.解决之道:1.终端输入:sudo vim /usr/share/wireshark/init.lua2.找到disable_lua = false改“disable_lua = false” 为 “disable_lua = true” 原文:http:/...

cocos2d-x + Lua的cc.Repeat动画执行次数不准,巨坑【代码】

Repeat这个Action的本意是可以方便地对某一个动画执行指定的次数,比如这段代码:scene.index = 0--延时local delayAction = cc.DelayTime:create(0.5)--回调local callFuncAction1 = cc.CallFunc:create(function()scene.index = scene.index + 1cclog("index: %d", scene.index)end)--序列local sequenceAction = cc.Sequence:create(delayAction, callFuncAction1)--重复local repeatAction = cc.Repeat:crea...

lua的变量查找及全局变量

一、从hello world说起当执行print("Hello World!")时,明显这是需要有执行一个特定的向标准输出打印字符串的功能,所以这里首先涉及到的是一个函数查找的问题,也就是如何把字符串和对应的功能联系起来。在最为常见的C语言中,这个查找是由链接器完成的:它从所有的obj文件中查找这个函数的定义,然后把这个地方转换成对应位置的CPU call指令。对应地,对于lua,同样需要有方法将这个字符串和真正的函数调用联系起来。那么最后的问...

lua学习笔记1 环境配置【图】

1 开发平台windows7 64位2 下载链接http://www.lua.org/download.html3 安装完成-环境配置 4 运行 WIN+R 运行 cmd 运行lua,显示配置成功。 原文:http://www.cnblogs.com/nanwei/p/7074158.html

LUA string库【图】

Lua解释器对字符串的支持很有限。一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容。在Lua中操纵字符串的功能基本来自于string库。一、String库的常用函数:--返回字符串s的长度 local s = "HelloWorld" print(string.len(s)) -->10--重复n次字符串s的串 print(string.rep(s,2)) -->HelloWorldHelloWorld--大写字母转换成小写 print(string.lower(s)) -->helloworld--小写转换成大写 p...

lua执行字节码的过程介绍【代码】【图】

前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程。1 foo = "bar"2local a, b = "a", "b"3 foo = a生成的字节码如下所示:之前lua是在luaY_parser函数(入口)中完成了lua脚本的解析生成字节码的整个过程的,在生成了main func(过程见“lua解析赋值类型代码的过程“)后luaY_parser会返回一个Proto结构体指针tf,Proto结构将描述整个main func的所有信息。 1//如果此字符是LU...

Lua学习笔记之表达式【代码】

前言这里总结的内容和其它语言的基本类似,所以这里就只是基本的进行总结。不做详细的讲解。算术操作符Lua支持常规的算术操作符有:”+”(加法),”-”(减法),”*”(乘法),”/”(除法),”^”(指数),”%”(取模),一元的”-”(负号)。所有的这些操作符都用于实数。例如:x^0.5将计算x的平方根,x^3将计算x的3次方。关系操作符Lua提供的关系操作符有:”<”,”>”,”<=”,”>=”,”==”,”~=”;所有这些操作符的运算结果...

Nginx一致性哈希模块的Lua实现【代码】【图】

Nginx一致性哈希模块的Lua重新实现 技术背景:最近在工作中使用了nginx+redis 的架构,redis在后台做分布式存储,每个redis都存放不同的数据,这些数据都是某门户网站通过Hadoop分析出来的用户行为日志,key是uid,value是user profile,每小时更新量在500-800万条记录,而这些记录一旦生成,我需要在5分钟左右的时间完成所有导入过程。 首先,我在nginx中使用了第三方模块HttpUpstreamConsistent来做负载均衡策略,针对不同用户(...

Leetcode - Evaluate Reverse Polish Notation

初看貌似有点复杂,但是搞懂了非常简单,就一个简单的栈应用,每次遇到计算符号"+", "-", "*", "/"就将栈顶端两个数字出栈,计算后再将结果压栈即可。。#include<iostream> #include<vector> #include<stack> using namespace std;class Solution { public:int evalRPN(vector<string> &tokens) {stack<int> stack;for (int i = 0; i < tokens.size(); i++){if (tokens[i] == "*" || tokens[i] == "-" || tokens[i] == "+" || toke...

记录——时间轮定时器(lua 实现)【代码】

http://www.cnblogs.com/mmc1206x/p/6849172.html 很长一段时间里,我错误的认识了定时器。无意中,我发现了“时间轮”这个名词,让我对定时器有了新的看法。   我错误的认为,定时器只需要一个 tick 队列,按指定的时间周期遍历队列,检查 tick 倒计时满足触发条件就触发回调。tick 定义如下:1 struct Tick { 2 int_t n; 3 func_t func; 4 };遍历触发实现如下: 1 void Update()2 {3 for (auto & tick: _ticks)4 ...

[Lua学习]猜数字游戏【代码】【图】

1--设置随机数种子 2math.randomseed(os.time())3math.random()4 5print("猜数字游戏(0-100)")6 7local limit = 6 8local answer = math.random(0,100)910whiletruedo11print("剩余 " .. limit .. " 次机会:") 12local guess = io.read("*number") 13if guess == answer then14print("恭喜你猜对了!") 15break16elseif guess < answer then17print("猜太小了!") 18elseif guess > answer then19print("猜过头了!") 20end21 ...

Lua学习---Lua的控制结构【代码】

前言  由于之前有c/c++、javascript基础,所以学Lua的时候喜欢拿来和前面的语言比较,这里主要和C比较1.if...else  Lua的if语句格式:if 条件 then条件成立,运行的程序块 else条件失败,运行的程序块 endLua没有大括号来表明程序块,所以,后面要加上end来表明if语句已经结束,同样,嵌套if时,通过elseif和else if来区分2.while  格式:while 表达式 do--body end 注意:Lua并没有像其他语言那样提供类似continue这...

Lua脚本语言入门笔记

什么是Lua  Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位...