赞
踩
怎么想到研究;lua了呢.无意间看到了一篇关于redis的文章,看到这么一句话,学会redis必须会lua
使用lua可以让你提高好几个逼格!!!
当时我还笑了笑.这不是吹牛逼吗!但是知道有一次看到朋友的项目里面有lua脚本,朋友说这个可以理解成redis的存储过程,可以实现复杂的业务逻辑,而且和redis的命令相比执行效率也快.
这是才意识到自己的无知!!!
决心必须搞定他,这才来到了lua的世界
才发现他是那么的强大,他可以连接mysql ,oracle ,odbc, ado sqlite,postgre 等等
最关键的是,redis可以直接调用这个,nginx也可以操作lua.而且大型的电商网站的三层缓存架构的第一层就是用lua和nginx做的
lua中的数据类型
有8中基本数据类型
数据类型
|
描述
|
nil
|
这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
|
boolean
|
包含两个值:false和true。
|
number
|
表示双精度类型的实浮点数
|
string
|
字符串由一对双引号或单引号来表示
|
function
|
由 C 或 Lua 编写的函数
|
userdata
|
表示任意存储在变量中的C数据结构
|
thread
|
表示执行的独立线路,用于执行协同程序
|
table
|
Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
|
local function check_operated(userid, operate_code)
function_body return params
end
--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))
■ myprint = function(param)
print("这是打印函数 - ##",param,"##")
end
function add(num1,num2,functionPrint)
result = num1 + num2
-- 调用传递的函数参数
functionPrint(result)
end
myprint(10)
-- myprint 函数作为参数传递
add(2,5,myprint)
■ 这是打印函数 - ## 10 ##
■ 这是打印函数 - ## 7 ##
- 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}))
function average(...)
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. #arg .. " 个数")
return result/#arg
end
print("平均值为",average(10,5,3,4,5,6))
以上代码执行结果为:
总共传入 6 个数
平均值为 5.5
序号
|
方法 & 用途
|
1
|
table.concat (table [, sep [, start [, end]]]):
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
|
2
|
table.insert (table, [pos,] value):
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
|
3
|
table.maxn (table)
指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(
Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现
)
|
4
|
table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
|
5
|
table.sort (table [, comp])
对给定的table进行升序排序。
|
序号
|
方法 & 用途
|
1
|
string.upper(argument):
字符串全部转为大写字母。
|
2
|
string.lower(argument):
字符串全部转为小写字母。
|
3
|
string.gsub(mainString,findString,replaceString,num)
在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换),如:
>
string
.
gsub
(
"aaaa"
,
"a"
,
"z"
,
3
);
zzza
3
|
4
|
string.find (str, substr, [init, [end]])
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
>
string
.
find
(
"Hello Lua user"
,
"Lua"
,
1
)
7
9
|
5
|
string.reverse(arg)
字符串反转
>
string
.
reverse
(
"Lua"
)
auL
|
6
|
string.format(...)
返回一个类似printf的格式化字符串
>
string
.
format
(
"the value is:%d"
,
4
)
the value
is
:
4
|
7
|
string.char(arg) 和 string.byte(arg[,int])
char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
>
string
.
char
(
97
,
98
,
99
,
100
)
abcd
>
string
.
byte
(
"ABCD"
,
4
)
68
>
string
.
byte
(
"ABCD"
)
65
>
|
8
|
string.len(arg)
计算字符串长度。
string
.
len
(
"abc"
)
3
|
9
|
string.rep(string, n)
返回字符串string的n个拷贝
>
string
.
rep
(
"abcd"
,
2
)
abcdabcd
|
10
|
..
链接两个字符串
>
print
(
"www.runoob"
..
"com"
)
www
.
runoobcom
|
11
|
string.gmatch(str, pattern)
回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
>
for
word
in
string
.
gmatch
(
"Hello Lua user"
,
"%a+"
)
do
print
(
word
)
end
Hello
Lua
user
|
12
|
string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。
在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。
>
=
string
.
match
(
"I have 2 questions for you."
,
"%d+ %a+"
)
2
questions
>
=
string
.
format
(
"%d, %q"
,
string
.
match
(
"I have 2 questions for you."
,
"(%d+) (%a+)"
))
2
,
"questions"
|
循环类型
|
描述
|
在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
| |
重复执行指定语句,重复次数可在 for 语句中控制。
| |
重复执行循环,直到 指定的条件为真时为止
| |
可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)
|
语句
|
描述
|
if 语句
由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
| |
if 语句
可以与
else 语句
搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码。
| |
你可以在
if
或
else if
中使用一个或多个
if
或
else if
语句 。
|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。