Lua中的布尔值
Lua中的真值和假值除了nil和false为假, 其它都为真.
这意味着包括0, 空字符串, 空表都为真.
源码中关于布尔值的代码#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0))
说明:
ttisnil(o) : 判断对象o是否为nil值
ttisboolean(o) : 判断对象的tag是否为 LUA_TBOOLEAN
bvalue(o) : 判断对象的联合体 value_ 中的变量b是否为0
布尔值的应用传参时的「nil」和「false」的�Lua中经常给参数设置默认值的代码是 input = input or value, 当input为空时, 我们赋予它默认值value. 但是这个并不适用于布尔值.
如果我们的参数类型为false时, 执行input = input or value之后它被改成默认值, 所以input被改成了true!
逻辑运算符Lua中的逻辑运算符是 and, or, not, 其中逻辑运算规则下
A and B -- 如果A为fal ...
Lua 学习 chapter10
目录
正则表达式
模式匹配相关的函数
URL编码
制表符的展开
诀窍
模式
Just be handsome.
正则表达式
. 任意字符
%a 字母
%c 控制字符
%d 数字
%g 除空格外的可打印字符
%l 小写字母
%p标点符号
%s 空白字符
%u 大写字母
%w 字母和数字
%x 十六进制数字
%它们的大写字母表示它们的补集。
还有一些魔法字符,也可以称之为元字符。
其中与其他的语言不同的是在lua中%是转义字符而不是’'。
+ 重复一次或多次
* 重复零次或者多次(最大匹配)
- 重复零次或者多次(最小匹配)位于[]中中间表示范围
? 可选
^ 位于模式的开头 从头开始匹配 位于[]中开头表示非
$ 位于模式的结尾 从尾部向前匹配
在lua中可以使用()来对匹配到的结果进行返回。这个称之为捕获。
1
2
3
4
5
6
7
8
9
10
11
12
pair = "name = Anna"
key, value = string.matc ...
Lua string.find 中的 “坑”
我们的线上环境,ngx_lua api 都是以模块形式加载到 lua 级别的 vm 中,已达到最大性能。而且我们并没有使用传统的 “包” 的形式来加载(也就是 require "xx.xx.xx" ),而是直接以模块名为加载( require "xx" ),这就意味着我们需要不断的来动态设置 package.path 来配合 require 的机制。于是我们写了下面这个方法,来实现我们的需求:
function tools:loadluapath(root_path)
if root_path == nil then
return
end
<span class="kd">local</span> <span class="n">root_path</span> <span class="o">=</span> <span class="n">root_path ...
读《Lua程序设计》笔记
a.多重返回值
Lua允许函数返回多个结果,只需在return关键字后列出所有的返回值即可
查找数组中的最大元素1
2
3
4
5
6
7
8
9
10
11
function maximum(a)
local mi = 1 --最大值的索引
local m = a[mi] --最大值
for i,val in ipairs(a) do
if val>m then
mi = i; m=val
end
end
return m, mi
end
print (maximum({8,10,23,12,5})) -->23 3
b.变长参数
返回所有参数的总和1
2
3
4
5
6
7
8
function add(...)
local s = 0
for i,v in ipairs({...}) do --ipairs({...})可以简写为ipairs{...}
s = s + v
end
return ...
Lua
介绍
官网地址:
http://www.lua.org/home.html
Lua是脚本语言,可以自己运行,可以嵌入C语言运行,也可以把C语言嵌入Lua运行。
Lua全部都是用C语言实现的,可以到官网去下载源码,自己编译,编译过程很简单,没什么错误。
源码目录结构:
编译源码
需要在VS中新建一个VC++解决方案,在该解决方案下建3个项目,分别是lua库项目,lua编译器项目,lua解释器项目。
Lua53 是库项目,生成Lua53.lib。
Lua 是解释器项目,生成Lua.exe。
Luac 是编译器项目,生成Luac.exe。
最终要生成的文件如下:
建立Lua53项目
打开VS2013(其他版本亦可),新建VisuallC++ ->win32控制台应用程序,修改项目名称为Lua53,然后再点击确定。
点击下一步,选择静态库,空项目,点击完成。
将src目录下除了lua.c和luac.c其他所有文件加入lua53工程下的源文件目录
建立Luac编译器项目
打开VS2013(其他版本亦可),新建VisuallC++ ->win32控制台应用程序,修改项目名称为Lu ...
塔dang時會倒luai?~~Pisa ki 塔[比薩斜塔] 張春凰
塔dang時會倒luai?~~Pisa ki 塔[比薩斜塔]
Pisa 是zit gai義大利旅遊上尾後落腳e一站lo。
觀光區e四箍笠仔,真特殊,一落遊覽車,路攤排e紀念品,除了ki塔e模型,義大利境內e景點卡片,Pinocchioe複製品等等之外,真濟非洲人di zia deh銷售鼓、螺仔殼e產品,我為朋友選一條螺仔殼珮鍊,表示名牌國度之外,來自大自然e原始意味。
關係Pisa ki塔e代誌,大約di咱e小學生時代,老師dor會ga咱講e一個故事,關係近代物理之父Galeleo[伽利略1564-1642]di zia做過自由落體e實驗,為科學少年注入一寡常識。
等你到塔e面前,自然ma會親像咱一世人所意愛e夢中情人,出現di你目睭前仝款,趕緊想veh ga攬一個。拜科技發明憨呆hip像機e方便,zit個夢想dor di取背景,屈一個腳馬、做en倒e手勢,採擬真e角度了後,隨時dor出現di你相機鏡頭當中,你若無夠甲意,a dor gorh重來hip dor好。
每到一個景點,每一個所在,veh參觀大約攏愛門票,無收費e一定愛排隊,而且排隊無一定di自由行動e ...
欢迎使用LuaPerfect!
简介
LuaPerfect是腾讯公司开发的专业级的Lua集成开发环境,致力于为广大Lua开发人员提供免费的专业的Lua编辑调试工具。
LuaPerfect基于纯C++实现了独立的Lua编辑和调试工具:
1、接入方便:界面风格类似VS,符合VS用户习惯,非插件,接入自动化程度高,无需配置。
2、调试功能强大:稳定的基础调试功能,强大的表达式监视,悬浮监视,日志跳转,条件断点,Lua异常捕获,Lua反汇编等功能。还可以直接查看C#对象的各种成员,在Unity下还能列出组件列表和子物体列表。
3、调试性能高:调试密集Lua运算的游戏也不掉帧,因此特别适合调试游戏。
4、编辑功能强大:支持语法/语义代码高亮,自动API生成,语法检查,单词/语句自动完成,按语义跳转符号,代码格式化,类型推导,类型注解,全工程符号搜索,按语义重构等功能。
5、自带性能测试功能,测试密集Lua运算游戏的性能也不掉帧,因此结果更精确。
6、资源占用少:相对脚本化插件化的方案(IDEA,VSCode等),同等功能下内存等资源仅同类软件的一半左右。
7、稳定流畅:运行稳定流畅,经过内部外部大型项目重度使用验证,得到非常高 ...
Lua 在 Android 中应用上,如何引入 Lua
转载请附原文链接:Lua 在 Android 中应用上,如何引入 Lua
一、概要注:该部分适合不熟悉 NDK 编译的新手看,老司机请绕行
最近公司在做一个项目,利用一份 XML 文件来布局绘制 Android 和 iOS 界面,界面与用户的交互逻辑部分开始是根据自己定义的协议进行手动解析实现,但是这样有两个弊端,第一是每次需要一些特殊功能时候需要事先定义好协议,第二个是自己定义的协议在进行一些复杂的逻辑判断很麻烦,写起来很不方便。所以决定引入脚本来实现逻辑交互功能。说起脚本语言大家应该马上会想起 JavaScript, JavaScript 在前端开发应用最多,而且微信小程序也使用到了 js 脚本,那么我们为什么最终选择使用 Lua 了呢,因为 JavaScript 虽然功能强大,但是引擎使用起来稍微重了一点,而 Lua 是一个功能强大,高效,轻量级的嵌入式脚本语言,使用标准 Lua 库构建的 Lua 解释器需要 246K,Lua 库需要 421K。Why choose Lua? 而且 Android 中嵌入 Lua 优点很多,借助 Lua 脚本语言的优势,可以轻松实现动态逻辑控制 ...
在原有的nginx上面安装Openresty和lua相关的模块
突然有一天出了个需求,做文件防盗链的,而且需要通过nginx来做,这个时候必然想到了Openresty,Openresty本身其实已经安装有nginx了,但是要求在公司原有的nginx上面装一些Openresty里面的模块,这个时候就有点复杂了,但是最终还是研究出来了,庆幸啊,这里做一个笔记,以便下次安装使用。
安装openresty
下载openresty
下载地址:https://github.com/openresty/openresty/releases1wget https://github.com/openresty/openresty/releases/download/v1.13.6.1/openresty-1.13.6.1.tar.gz
编译安装
解压123tar -xvf openresty-1.13.6.1.tar.gzcd openresty-1.13.6.1
编译安装12345./configure -j2gmakegmake install
安装lua在下载openresty安装包的时候,里面其实已经依赖了lua了,只需要安装就好了
12345 ...
Lua C API 教程
从正在运行的 C 程序中,你可以调用 Lua 脚本。C 程序可以将参数传递给 Lua 脚本,而Lua脚本也可以向 C 程序传回一个返回值。Lua脚本可以用来初始化C程序,或者Lua脚本也可以在 C 程序中注册一个回调。
错误处理如果没有正确的信息,从C程序调用Lua脚本可能会令人望而生畏。不同的计算机对库和包含文件有不同的名称和位置,很难找出导致编译/链接问题的原因。在有错误的情况下,应该程序将错误信息输出到标准错误流中,而 Lua 核心绝不会直接输出任何东西到错误输出流上,它通过返回错误代码和信息来发出错误信号。每个应用程序都可以适当的用最适合它们自己的方式来处理这些错误信息。
下面是一段处理 Lua 错误的方案,它只是输出一条错误信息,关闭 lua_State,并退出整个应用程序:
12345678910111213141516171819#define ERRORS_H#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include "lua.h"void (lua ...