lua学习

--单行注释
--[=[
    多行注释
]=]
a. 变量个数 > 值的个数             按变量个数补足nil
b. 变量个数 < 值的个数             多余的值会被忽略

print语句:  ".."连接字符串,","空出一个tab再连接字符串

table索引从1开始

local var  --设置var为局部变量
tab1 = { key1 = "val1", key2 = "val2", "val3" }  --数据类型table格式
for k, v in pairs(tab1) do    --for循环table
    print(k .. " - " .. v)
end

条件判断中, Lua中 0 为 true

-- 函数:可变参数  并用args局部变量保存可变参数
function average(...)
   result = 0
   local arg={...}    --> 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))
function avg(fmr,...)
   return select("#",...)
end
print(avg(4,5,6,7,8,9))

-- 返回结果5,因为select('#', …)返回可变参数的长度,而固定参数fmr占一位,所以返回可变参数5


function avg(fmr,...)
   return select("2",...)
end
print(avg(4,5,6,7,8,9))

--返回6,7,8,9,因为可变参数从5开始,所以第2位,则从6开始返回

 

tab3 = {}
tab3[1]="1"
tab3[2]="2"
tab3[4]="4"
print("tab3长度"..#tab3)
--  在获取表的长度时,根据的是表的最大索引的值,则输出为4


tab3={}
tab3[1]="1"
tab3[2]="2"
tab3[5]="5"
print("tab3的长度",#tab3)

--输出为2,因为2到5跨度为3,大于2,所以只算前2个
print(string.find("haolo ni hao","ao"))
-- 输出位2,3

print(string.find("haolo ni hao","ao",5))
-- 输出11,12,因为第三个参数为5,所以从第5位开始查找

 

> print(string.gsub("zzy!jd","%a","~"))
~~~!~~  5
> print(string.gsub("zzy!jd","%A","~"))
zzy~jd  1
> print(string.gsub("zzy!jd",".","~"))
~~~~~~  6
> print(string.gsub("zzy!jd",".-","~"))
~z~z~y~!~j~d~   7

%a是每个字母

%A是每个标点字符

.是每一个字符

.-是没一个字符的左右

 

下面的表列出了Lua支持的所有字符类:

字符类:(character classes)
. all characters
%a letters
%c control characters
%d digits
%l lower -case letters
%p punctuation characters
%s space characters
%u upper-case letters
%w alphanumeric characters
%x hexadecimal digits
%z the character whose representation is 0

单个字符(除^$()%.[]*+-?外): 与该字符自身配对

.(点): 与任何字符配对
%a: 与任何字母配对
%c: 与任何控制符配对(例如\n)
%d: 与任何数字配对
%l: 与任何小写字母配对
%p: 与任何标点(punctuation)配对
%s: 与空白字符配对
%u: 与任何大写字母配对
%w: 与任何字母/数字配对
%x: 与任何十六进制数配对
%z: 与任何代表0的字符配对
%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对.例如,’%A’非字母的字符

‘%’ 用作特殊字符的转义字符,因此 ‘%.’ 匹配点;’%%’ 匹配字符 ‘%’。转义字符 ‘%’不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。

+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次
- 匹配前一字符0次或多次
? 匹配前一字符0次或1次

string.gmatch()函数

 

 string.match()函数

 字符串,移除中文部分

function StrSplit(inputstr, sep)
    if sep == nil then
      sep = "%s"
    end
    local t={}
    local i=1
    for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
       t[i] = str
       i = i + 1
    end
    return t
end
local a = "23245023496830,汉字。。。。"
local b = ":"
b = StrSplit(a,",")
print(b[1])

----輸出: 23245023496830

 

无状态迭代器

-- 无状态的迭代器

--示例一
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

for i,n in square,3,0
do
   print(i,n)
end

--示例二
function iter (a, i)
    i = i + 1
    local v = a[i]
    if v then
       return i, v
    end
end
 
function ipairs (a)
    return iter, a, 0
end

 

--简单for循环示例
for i=1,10,1 do
    print(i)
end

 pairs和ipairs的异同

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值