失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Lua学习笔记3. 函数可变参数和运算符 转义字符串 数组

Lua学习笔记3. 函数可变参数和运算符 转义字符串 数组

时间:2023-05-25 22:25:39

相关推荐

Lua学习笔记3. 函数可变参数和运算符 转义字符串 数组

1。 Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数

lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数

function func_no_p(...)local arg={...}for k,v in pairs(arg} doprint(v ..",")endprint("输入参数个数:".. #arg)endfunc_no_p(1,2,34,1,"string")

2. 运算符方面需要注意的就是 不等式符号和matlab一样 ~=,还有各种运算符的优先级

^not - (unary) --这里是符号* /+ -..< > <= >= ~= ==andor

除了^ 和 .. 外所有的二元运算符都是左连续的。

这里要特别注意的是 x^y^2 等价于 x^(y^2)

3. 转义字符串

4. 字符串的一些重要操作

string.upper(argument)

string.lower(argument)

string.gsub(mainString,findString,replaceString,num) --字符串替换

其中num表示要替换的次数,如果num大于等于包含的fingString次数,或者num省略就全部替换,否则从前往后替换num个

> string.gsub("Hello",'l','ee')

输出 Heeeeeo 2,两个值

string.find(str,substr,[init,[end]])

其中[ ]是可选参数表示寻找区间,返回两个值表示子串在原串中起始和终止index

> string.find("Lua is aa new wapon",'ea',5,10)

输出 16 17

string.reverse(arg)

string.format(...)

格式化字符串,例如string.format('the value is %7.0d',4) 输出占位7位的4

string.char(arg),string.byte(arg[,int])

将整型数字转变成字符串连接,和将字符串arg中的首字符或者int指定字符转换成整数值

> string.char(97,65,48) 输出 aA0

>string.byte("Hello") 输出72

string.len(arg) 和#arg相同功能,统计arg的长度

string.rep(string,n) 拷贝n次字符串

.. 字符串的连接

5. Lua数组

Lua中一维数组和多维数组都是table,只不过多维数组中table的每一个索引还对应着table

需要注意的是table的索引可以自己设定值,那么就不限定从0还是从1开始计数了,但默认情况下是从1开始计数的。

如果使用不存在的索引或者超出索引范围的话,返回nil

二维数组实例

arr={}for i=1,3 doarr[i]={}for j=1,3 doa[i][j]=i*jendendfor i=1,3 dofor j=1,3 doprint(arr[i][j])endend-- 另一种索引arr={}maxRows=3maxCols=3for row=1,maxRows dofor col=1,maxCols doarr[row*maxCols+col]=row*col-- 注意这里并不是从0或者1开始索引的endendfor row=1,maxRows dofor col=1,maxCols doprint(arr[row*maxCols+col])endend

6. 迭代器

迭代器包括无状态迭代器和多状态迭代器,迭代器一般由迭代函数,‘状态常量’和‘控制变量’组成,其中状态常量和控制常量是迭代函数的输入参数

迭代函数往往输出两个值: 控制参数和该控制参数下的函数值,比如我们定义如下的迭代器

function tabSearch(tab1, curIdx)MaxCount = #tab1if curIdx<maxCount thencurIdx=curIdx+1return curIdx, tab1[curIdx]endendtab1={1,2,3,4,5}for k,v in tabSearch, tab1,0 doprint(v)end

ipairs实现方式

function iter(a,i)i=i+1local v=a[i]if v thenreturn i,vendendfunction ipairs(a)return iter, a, 0end

其实无状态和多状态迭代器的差别并不大,无状态迭代器的参数只有状态常量和控制变量,就好比数组中的最大长度和索引;而多状态迭代器需要在迭代函数中传递许多参数,因此可以利用数组作为状态常量输入,如上面的tabSearch迭代函数

7. table操作 (首先lua有垃圾自动回收机制)

table.concat(table,[,sep [,start [,end]]]): 其中sep定义了连接的分隔符,start,end定义了连接的后面的table中范围

table.insert(table,[pos,] value ])

table.remove(table[,pos])

table.sort(table[,comp]):对指定的table升序排列

days={'Mon',"Tue","Wed","Thu","Fri"}string1="排序前:"for k,v in ipairs(days) dostring1=string1.. v.." "endprint(string1)table.sort(days)string2="排序后:"for k,v in pairs(days) dostring2=string2..v.." "endprint(string2)

如果觉得《Lua学习笔记3. 函数可变参数和运算符 转义字符串 数组》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。