- 浏览: 44613 次
- 性别:
- 来自: 广州
文章分类
1, mac安装lua
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
tar -zxvf lua-5.1.5.tar.gz && cd lua-5.1.5
make macosx test
sudo make install
bin -> /usr/local/bin --> 将lua.c 编译成可执行文件 lua
inc -> /usr/local/include
lib -> /usr/local/lib --> 只有 一个 liblua.a
lua和erlang一样,有 嵌入 和 交互 两种模式, 交互模式有赖于lua.c程序
浅析lua.c 文件:
lua_State *L = lua_open(); /* create state lua_open() 只是宏 ,替换 lua_newstate() */
int status = lua_cpcall(L, &pmain, &s);
int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
// Calls the C function func in protected mode. func starts with only one element in its stack
static int pmain (lua_State *L) {
}
typedef int (*lua_CFunction) (lua_State *L);
union GCObject {
GCheader gch; // 等同 Commonheader
union TString ts;
union Udata u;
union Closure cl;
struct Table h;
struct Proto p;
struct lua_State th;
};
typedef union { GCObject *gc; void *p; lua_Number n; int b; } Value; //
typedef struct lua_TValue { Value value; in tt } TValue; // Tagged Value
typedef TValue *StkId; /* 指针 index to stack elements */
/* tt 取值区间 */
#define LUA_TNONE (-1)
#define LUA_TNIL 0
#define LUA_TBOOLEAN 1
#define LUA_TLIGHTUSERDATA 2
#define LUA_TNUMBER 3
#define LUA_TSTRING 4
#define LUA_TTABLE 5
#define LUA_TFUNCTION 6
#define LUA_TUSERDATA 7
#define LUA_TTHREAD 8
typedef union Closure { CClosure c; LClousure l; } Closure;
struct lua_State {
StkId top; /* first free slot in the stack */
StkId stack; /* stack base 计算: ptrdiff_t old_top = L->top - L->stack */
StkId stack_last; /* last free slot in the stack */
CallInfo *ci; /* call info for current function */
CallInfo *base_ci; /* array of CallInfo's 计算: ptrdiff_t old_ci = L->ci - L->base */
CallInfo *end_ci; /* points after end of ci array 等同 L->base_ci + L->size_ci - 1 */
int size_ci; /* size of array `base_ci' */
StkId base; /* base of current function 等同于 L->ci->base; */
TValue l_gt; /* table of globals */
}
Lua解释器运行脚本
% lua hello.lua
hello.lua:
print("enter a number:")
a = io.read("*number");
print(a)
交互模式 加载程序块
> dofile("mydef.lua")
> n = calc(3.4, 1)
> print(n)
在未初始化的变量不会报错, 返回nil
删除某个变量,只需设为nil
注释: -- chunk
-- [[
-- ]]
lua -e "print(math.sin(12))" // 命令行执行 lua代码
lua有8种基础类型: nil boolean number string user data function thread table
类型查看函数:type(xx)
assert (v [, message]) 相当于C的断言,
if nil ~= cond then
--
elseif 2== cond then
--
else
--
end
string.len(s) 返回字符串s的长度;
string.rep(s, n) 返回重复n次字符串s的串;
string.lower(s) 将s中的大写字母转换成小写
string.upper(s) 将s中的小写字母转换成大写
string.sub(s,i,j) 函数截取字符串s的从第i个字符到第j个字符之间的串。
Lua字符串的第一个字符索引从1开始。 -1指向最后一个字符
string.char函数和string.byte函数用来将字符在字符和数字之间转换。
string.char获取0个或多个整数,将每一个数字转换成字符,然后返回一个所有这些字符连接起来的字符串。
string.byte(s, i)将字符串s的第i个字符的转换成整数;
print(string.char(97)) --> a
print(string.char(99, 100, 101)) --> cde
print(string.byte("abc", -1)) --> 99
string.format()
格式字符串可能包含以下的转义码:
%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串
可以在%号后添加参数
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
(4) 宽度数值
(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n,
若后接f则设定该浮点数的小数只保留n位, 若后接s则设定该字符串只显示前n位.
string.format("%x", 13) 输出d
string.format("%X", 13) 输出D
string.format("%e", 1000) 输出1.000000e+03
string.format("%u", 3.14) 输出3
string.format("%05d", 17) 输出00017
string.format("%5.3s", "monkey") 输出 mon
string.format("pi = %.4f", PI) 输出 pi = 3.1416
对 email 进行编码。将字母数字 @ . _ 之外的字符编码为 %XX 的形式。
local function _encode(str)
return string.format("%%%02X",string.byte(str))
end
function emailEncode(str)
return string.gsub(str,"([^%w_@.])",_encode)
end
解码:
local function _decode(str)
return string.char(tonumber(str,16))
end
function emailDecode(str)
return string.gsub(str,"%%(%w%w)",_decode)
end
如果你想不关心大小写对一个数组进行排序的话,你可以这样:
table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)
string.gsub (s, pattern, repl [, n])
s, _ = string.gsub("day day down", "down", "up")
print(s) --> day day up -- 第二个返回值表示 替换的次数
% 专义符
特殊字符:(). % + - * ? [ ^ $
模式串
. 任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p 标点字符
%s 空白符
%u 大写字母
%w 字母和数字
%x 十六进制数字
%z 代表 0的字符
+ 匹配前一字符 1 次或多次,最长匹配
* 匹配前一字符 0 次或多次,最长匹配
- 匹配前一字符 0 次或多次,最短匹配
? 匹配前一字符 0 次或 1次
以 '^' 开头表示只匹配目标串的开始部分,// [^%w_@.] 表示取反
以 '$' 结尾表示只匹配目标串的结尾部分。
%n, with n between 1 and 9, stands for the value of the n-th captured substring
repl是字符串,则为替换。
repl为函数,则每次匹配成功则调用该函数
repl是表
If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil,
then there is no replacement
如去除字符串首尾的空格:
function trim (s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
参数为函数类型
x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
--> x="4+5 = 9"
参数为表类型
local t = {name="lua", version="5.1"}
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"
string.gmatch(s, pattern)
Returns an iterator function that, each time it is called,
returns the next captures from pattern over string s.
If pattern specifies no captures, then the whole match
is produced in each call.
s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
print(w)
end
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k] = v
end
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
tar -zxvf lua-5.1.5.tar.gz && cd lua-5.1.5
make macosx test
sudo make install
bin -> /usr/local/bin --> 将lua.c 编译成可执行文件 lua
inc -> /usr/local/include
lib -> /usr/local/lib --> 只有 一个 liblua.a
lua和erlang一样,有 嵌入 和 交互 两种模式, 交互模式有赖于lua.c程序
浅析lua.c 文件:
lua_State *L = lua_open(); /* create state lua_open() 只是宏 ,替换 lua_newstate() */
int status = lua_cpcall(L, &pmain, &s);
int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
// Calls the C function func in protected mode. func starts with only one element in its stack
static int pmain (lua_State *L) {
}
typedef int (*lua_CFunction) (lua_State *L);
union GCObject {
GCheader gch; // 等同 Commonheader
union TString ts;
union Udata u;
union Closure cl;
struct Table h;
struct Proto p;
struct lua_State th;
};
typedef union { GCObject *gc; void *p; lua_Number n; int b; } Value; //
typedef struct lua_TValue { Value value; in tt } TValue; // Tagged Value
typedef TValue *StkId; /* 指针 index to stack elements */
/* tt 取值区间 */
#define LUA_TNONE (-1)
#define LUA_TNIL 0
#define LUA_TBOOLEAN 1
#define LUA_TLIGHTUSERDATA 2
#define LUA_TNUMBER 3
#define LUA_TSTRING 4
#define LUA_TTABLE 5
#define LUA_TFUNCTION 6
#define LUA_TUSERDATA 7
#define LUA_TTHREAD 8
typedef union Closure { CClosure c; LClousure l; } Closure;
struct lua_State {
StkId top; /* first free slot in the stack */
StkId stack; /* stack base 计算: ptrdiff_t old_top = L->top - L->stack */
StkId stack_last; /* last free slot in the stack */
CallInfo *ci; /* call info for current function */
CallInfo *base_ci; /* array of CallInfo's 计算: ptrdiff_t old_ci = L->ci - L->base */
CallInfo *end_ci; /* points after end of ci array 等同 L->base_ci + L->size_ci - 1 */
int size_ci; /* size of array `base_ci' */
StkId base; /* base of current function 等同于 L->ci->base; */
TValue l_gt; /* table of globals */
}
Lua解释器运行脚本
% lua hello.lua
hello.lua:
print("enter a number:")
a = io.read("*number");
print(a)
交互模式 加载程序块
> dofile("mydef.lua")
> n = calc(3.4, 1)
> print(n)
在未初始化的变量不会报错, 返回nil
删除某个变量,只需设为nil
注释: -- chunk
-- [[
-- ]]
lua -e "print(math.sin(12))" // 命令行执行 lua代码
lua有8种基础类型: nil boolean number string user data function thread table
类型查看函数:type(xx)
assert (v [, message]) 相当于C的断言,
if nil ~= cond then
--
elseif 2== cond then
--
else
--
end
string.len(s) 返回字符串s的长度;
string.rep(s, n) 返回重复n次字符串s的串;
string.lower(s) 将s中的大写字母转换成小写
string.upper(s) 将s中的小写字母转换成大写
string.sub(s,i,j) 函数截取字符串s的从第i个字符到第j个字符之间的串。
Lua字符串的第一个字符索引从1开始。 -1指向最后一个字符
string.char函数和string.byte函数用来将字符在字符和数字之间转换。
string.char获取0个或多个整数,将每一个数字转换成字符,然后返回一个所有这些字符连接起来的字符串。
string.byte(s, i)将字符串s的第i个字符的转换成整数;
print(string.char(97)) --> a
print(string.char(99, 100, 101)) --> cde
print(string.byte("abc", -1)) --> 99
string.format()
格式字符串可能包含以下的转义码:
%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串
可以在%号后添加参数
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
(4) 宽度数值
(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n,
若后接f则设定该浮点数的小数只保留n位, 若后接s则设定该字符串只显示前n位.
string.format("%x", 13) 输出d
string.format("%X", 13) 输出D
string.format("%e", 1000) 输出1.000000e+03
string.format("%u", 3.14) 输出3
string.format("%05d", 17) 输出00017
string.format("%5.3s", "monkey") 输出 mon
string.format("pi = %.4f", PI) 输出 pi = 3.1416
对 email 进行编码。将字母数字 @ . _ 之外的字符编码为 %XX 的形式。
local function _encode(str)
return string.format("%%%02X",string.byte(str))
end
function emailEncode(str)
return string.gsub(str,"([^%w_@.])",_encode)
end
解码:
local function _decode(str)
return string.char(tonumber(str,16))
end
function emailDecode(str)
return string.gsub(str,"%%(%w%w)",_decode)
end
如果你想不关心大小写对一个数组进行排序的话,你可以这样:
table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)
string.gsub (s, pattern, repl [, n])
s, _ = string.gsub("day day down", "down", "up")
print(s) --> day day up -- 第二个返回值表示 替换的次数
% 专义符
特殊字符:(). % + - * ? [ ^ $
模式串
. 任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p 标点字符
%s 空白符
%u 大写字母
%w 字母和数字
%x 十六进制数字
%z 代表 0的字符
+ 匹配前一字符 1 次或多次,最长匹配
* 匹配前一字符 0 次或多次,最长匹配
- 匹配前一字符 0 次或多次,最短匹配
? 匹配前一字符 0 次或 1次
以 '^' 开头表示只匹配目标串的开始部分,// [^%w_@.] 表示取反
以 '$' 结尾表示只匹配目标串的结尾部分。
%n, with n between 1 and 9, stands for the value of the n-th captured substring
repl是字符串,则为替换。
repl为函数,则每次匹配成功则调用该函数
repl是表
If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil,
then there is no replacement
如去除字符串首尾的空格:
function trim (s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
参数为函数类型
x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
--> x="4+5 = 9"
参数为表类型
local t = {name="lua", version="5.1"}
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"
string.gmatch(s, pattern)
Returns an iterator function that, each time it is called,
returns the next captures from pattern over string s.
If pattern specifies no captures, then the whole match
is produced in each call.
s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
print(w)
end
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k] = v
end
发表评论
-
lua元表
2014-08-31 19:21 0通常,lua的每个值都有一套预定义的操作集合。 可以将数字相加 ... -
lua编译和执行
2014-08-30 19:32 507Lua代码 dofile 用于运行lua代码块. 但实际上l ... -
迭代器
2014-08-30 00:21 332迭代器: 是一种可以遍历一种集合所有元素的机制。 Lua使用函 ... -
lua函数
2014-08-30 00:14 433第一类值:函数可以存储到变量中,可作为实参传递,还可以作为函数 ... -
table
2014-08-31 13:35 387table 没有固定大小,可动态添加。 关联数组,通过整数索引 ... -
lua模块加载
2014-08-27 23:00 682module(mod name, [package.seeal ... -
lua和c++互相调用
2014-08-19 23:43 520一,lua跳用c++函数: c++函数原型: static ... -
lua5.2文档
2014-07-23 12:16 477模块管理: The package library provi ...
相关推荐
自己编写的一些lua基础库,包含了常用的字符串处理;文件夹处理;文件处理等
unity中热更必备的lua基础,和 下载ulua插件以及tolua#工程,供入门使用
7_lua基础篇_表
lua基础,脚本策划LUA基础入门,新人们学习lua指引方向
lua基础教程合集,介绍 Lua 编程语言的基础知识,适合初学者。
lua基础篇-流程控制语句
5_lua基础篇_函数
lua基本文档,适合初学时,包含lua函数库 lua模式匹配 lua文件处理 lua表和元方法
Lua 基础教程(十一)数组
Lua 基础教程(六)运算符
Lua 基础教程(九)函数
Lua 基础教程(一)概览
Lua 基础教程(四)变量
6-lua基础篇-字符串
Lua 基础教程(五)数据类型
Lua 基础教程(十二)迭代器
Lua 基础教程(三)基本语法
Lua 基础教程(七)循环语句
Lua 基础教程(十)字符串
Lua 基础教程(八)条件语句