Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组
1。 Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数
lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数
function func_no_p(...) local arg={...} for k,v in pairs(arg} do print(v ..",") end print("输入参数个数:".. #arg) end func_no_p(1,2,34,1,"string")
2. 运算符方面需要注意的就是 不等式符号和matlab一样 ~=,还有各种运算符的优先级
^ not - (unary) --这里是符号 * / + - .. < > <= >= ~= == and or
除了^ 和 .. 外所有的二元运算符都是左连续的。
这里要特别注意的是 x^y^2 等价于 x^(y^2)
3. 转义字符串
转义字符 | 意义 | ASCII码 |
\a | 响铃 | 007 |
\b | 退格(BS),将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) | 010 |
\r | 回车(CR) | 013 |
\t | 水平制表符 | 009 |
\v | 垂直制表 | 011 |
\\ | \ | 092 |
\' | ' | 039 |
\" | " | 034 |
\0 | 空字符 | 000 |
\ddd | 八进制 | 三位八进制 |
\xhh | 十六进制 | 二位十六进制 |
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 do arr[i]={} for j=1,3 do a[i][j]=i*j end end for i=1,3 do for j=1,3 do print(arr[i][j]) end end -- 另一种索引 arr={} maxRows=3 maxCols=3 for row=1,maxRows do for col=1,maxCols do arr[row*maxCols+col]=row*col -- 注意这里并不是从0或者1开始索引的 end end for row=1,maxRows do for col=1,maxCols do print(arr[row*maxCols+col]) end end
6. 迭代器
迭代器包括无状态迭代器和多状态迭代器,迭代器一般由迭代函数,‘状态常量’和‘控制变量’组成,其中状态常量和控制常量是迭代函数的输入参数
迭代函数往往输出两个值: 控制参数和该控制参数下的函数值,比如我们定义如下的迭代器
function tabSearch(tab1, curIdx) MaxCount = #tab1 if curIdx<maxCount then curIdx=curIdx+1 return curIdx, tab1[curIdx] end end tab1={1,2,3,4,5} for k,v in tabSearch, tab1,0 do print(v) end
ipairs实现方式
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
其实无状态和多状态迭代器的差别并不大,无状态迭代器的参数只有状态常量和控制变量,就好比数组中的最大长度和索引;而多状态迭代器需要在迭代函数中传递许多参数,因此可以利用数组作为状态常量输入,如上面的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) do string1=string1.. v.." " end print(string1) table.sort(days) string2="排序后:" for k,v in pairs(days) do string2=string2..v.." " end print(string2)
- 【Lua学习笔记】 --> 《字符串string与table的函数操作》
- 2.关于结构体以及结构体数组作为函数入口参数的方法(学习笔记)
- C/C++学习之C提高----C数组的定义、类型、定义数组指针变量、多维数组的本质、多维数组做函数参数、将两个数组中的字符串copy到第三个数组
- Python学习笔记7-把函数当参数传递、指定可变参数
- Noah的学习笔记之Python篇:函数“可变长参数”
- 【Shell】-- 入门笔记(1) : 变量、字符串、数组、参数及基本运算符
- JNI学习笔记:数组作为函数参数
- Scala 学习笔记(三)------定义具有可变参数的函数
- python学习笔记——函数可变参数处理
- PHP学习笔记——可变个数参数的函数;
- C语言学习笔记-----伊能---函数可变参数
- C++学习笔记(三)--函数参数,数组函数,指针和const,二维数组函数,递归,函数指针
- 【学习笔记】算法竞赛:chapter 3 & 4 数组、字符串;函数、递归
- Lua学习笔记之函数、变长参数、closure(闭包)、select等
- Python学习笔记7-把函数当参数传递、指定可变参数
- 学习笔记---指针法访问数组、数组的实质、数组/指针作为函数参数
- Object-C 语法 字符串 数组 字典 和常用函数 学习笔记
- Java学习笔记003——继承、抽象类、类相等测试、泛型数组列表、可变参数方法
- Python学习笔记7-把函数当参数传递、指定可变参数
- 黑马程序员--学习笔记--一个字符串、数组、函数综合运用的小练习