Lua基础知识一

首先推荐菜鸟教程网站http://www.runoob.com/lua/lua-tutorial.html,应为我也是刚接触所以从菜鸟学起。
1.注释
单行注释

--

多行注释

--[[
--]]

2.lua 的保留关键词

and break   do  else
elseif  end false   for
function    if  in  local
nil not or  repeat
return  then    true    until
while

3.lua数据类型
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。
一般测试给定变量和数据类型可以写为

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type(X)))            --> string

一般nil相当于C#中的null,不同的是当一个值被赋值为nil的时候这个值会在内存中删
4.String类型中可以一有这三种方式来表示
4.1转义字符
\n 换行
\代表一个反斜杠
\“代表“
\’代表’
转义字符
意义
ASCII码值(十进制)
\a
响铃(BEL)
007
\b
退格(BS) ,将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF) ,将当前位置移到下一行开头
010
\r
回车(CR) ,将当前位置移到本行开头
013
\t
水平制表(HT) (跳到下一个TAB位置)
009
\v
垂直制表(VT)
011
\
代表一个反斜线字符”\’
092
\’
代表一个单引号(撇号)字符
039
\”
代表一个双引号字符
034
\0
空字符(NULL)
000
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\xhh
1到2位十六进制所代表的任意字符
二位十六进制

1."string"
2.'string'
3.html = [[
<html>
<head></head>
<body>
    <a href="http://www.runoob.com/">菜鸟教程</a>
</body>
</html>
]]
print(html)

4.2字符串的操作

str="my Name is lexjay"
str2=string.upper(str)--把所有的字符转变成大写字母
str3=string.lower(str)--把所有字符转变成小写字母
str4=string.gsub(str,"i","123"2)--将字符串中的字母替换掉,最后一个参数是可以替换的最大的次数从前往后开始替换

index=string.find(str,"Nanme"37)--返回所查找的位置的索引,索引是从1开始,最后为一个参数是开始搜索的索引。搜索不道德情况下返回nil。

str5 =string.reverse(str)--字符串的反转
num1=5
string.format("加法运算:%d+%d+%d",num1,num2,(num1+num2))--字符串的格式化
str7=string.format("select" from user where username='%s'",username)
> string.char(97,98,99,100)
abcd
> string.byte("ABCD",4)
68
> string.byte("ABCD")
65
length1=string.len("abc")--字符串长度
sr=string.rep("abcd",4)--字符串的拷贝
--回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
> for word in string.gmatch("Hello Lua user", "%a+") do print(word) end
Hello
Lua
user

%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串

并且在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:

> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6
> print("-2e2" * "6")
-1200.0
> print("error" + 1)
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
    stdin:1: in main chunk
    [C]: in ?

使用 # 来计算字符串的长度,放在字符串前面,并且中文字是2个字节删除操作的时候需要delete两次,第一次会显示为?第二次才完全删除

> len = "www.runoob.com"
> print(#len)
14
> print(#"www.runoob.com")
14
> 

4.函数使用
修饰符 function
局部函数 [local] function functionName(arg1,arg2,arg3….argn)
functionbody(函数内容)
return val1,val2….valn(可有可没有)
end

函数的性质
函数可以作为数据赋值,可以作为参数传递
lua里的函数可以返回多个值,c#不支持. 例如

function temp()
return 10,15,20,30
end
res1,res2,res3,res4=temp()
print(res1,res2,res3,res4)

函数中的可变参数

function test(...)
local arg={...}
--如果不定义arg,arg最后有一个值表示参数个数
--#arg 取得参数的个数
print(arg) --arg表示一个表
print(arg[1])
for k,v in pairs(arg) do
res=res+v
end
end
test()
test(10)
test(1,20)
test(2,15,30)
test(2,15,30,15)
function fact(n)
if n==1 then
return n;
else
return n*fact(n-1)
end
end
print(fact(3))
print(fact(5))

函数也能当类型来使用,函数在lua中是数据类型,函数可以作为参数传递

fact2=fact
print(fact2(5))
function testfun(tab,fun)
for k,v in pairs(tab) do
fun(k,v)
end
end
tab= {key1="val1",key2="val2"}
function f1(k,v)
print(k..":"..v)
end

testfun(tab,f1)

function f2(k,v)
print(k.." "..v)
end

testfun(tab,f2)

匿名函数,只使用一次,匿名函数代码量很小

testfun(tab,
function(k,v)
print(k.."-"..v)
end
)

5.for循环
for循环
1.数值for 循环
’for var=start,end,step do
循环体
end
这里var会从start变化到end,每次变化-step进行
2.泛型for循环

4.repeat until (do while)
repeat
循环体
until(condition)

for i=1,10,2 do
print(i)
end
for i=20,1,-1 do
print(i)
end

tab1= {key1="val1",key2="val2"}
for k,v in pairs(tab1) do
print(k,v)
end

a=1
repeat
print(a)
a=a+1
until(a>=10)

嵌套for循环

for i=1,10 do
for j=1,i do
print(i)
end
end

for i=1,10 do
j=1
while j<=i do
print(i)
j=j+1
end
end

6.流程控制既(if和if else,elseif)语句
if(布尔表达式)then
为true的时候要执行的代码
end

if(布尔表达式)then
为true的时候要执行的代码
else
为false的时候要执行的代码
end

除了单纯的true,false字面意思外 nil为false其余都为true

if(布尔表达式)then
elseif(布尔表达式)
end

if(a) then
print("a不为空")
end

if(a) then
print("a不为空")
else
print("a为空")
end

a=100
if(a<=50)then
print("a<=50")
elseif(a<=150)then
print("a<=50")
else
print("都不满足")
end

6.lua中的运算符+ - * / % ^ 求幂 -

a=10.0
b=20
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a%b)--求余操作可以对小数进行操作
print(a^b)
print(-3)

关系运算符== ~= > < >= <=

if(a==b)then
print("a==b"
else 
print("a~=b")

逻辑运算符 and or not 与,或,非
a and b a, b 都为true则结果为true
a or b a,b中只要有一个为true,结果为true
not a 取反

print(“hello”..”world”) ..连接的
中#是取得表的长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值