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(,,,,"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=, do
arr[i]={}
for j=, do
a[i][j]=i*j
end
end for i=, do
for j=, do
print(arr[i][j])
end
end -- 另一种索引
arr={}
maxRows=
maxCols=
for row=,maxRows do
for col=,maxCols do
arr[row*maxCols+col]=row*col -- 注意这里并不是从0或者1开始索引的
end
end for row=,maxRows do
for col=,maxCols do
print(arr[row*maxCols+col])
end
end
6. 迭代器
迭代器包括无状态迭代器和多状态迭代器,迭代器一般由迭代函数,‘状态常量’和‘控制变量’组成,其中状态常量和控制常量是迭代函数的输入参数
迭代函数往往输出两个值: 控制参数和该控制参数下的函数值,比如我们定义如下的迭代器
function tabSearch(tab1, curIdx)
MaxCount = #tab1
if curIdx<maxCount then
curIdx=curIdx+
return curIdx, tab1[curIdx]
end
end
tab1={,,,,}
for k,v in tabSearch, tab1, do
print(v)
end
ipairs实现方式
function iter(a,i)
i=i+
local v=a[i]
if v then
return i,v
end
end function ipairs(a)
return iter, a,
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学习笔记3. 函数可变参数和运算符、转义字符串、数组的更多相关文章
- Python新手学习基础之函数-可变参数**
可变参数( ** ) 讲好了一颗*,那如果函数的最后一个参数带有 ** 前缀: 所有正常参数之外的其他的关键字参数都将被放置在一个字典中传递给函数. 要好好理解* 和 ** 两种可变参数哦~ 看个** ...
- python学习笔记之函数的参数
函数的参数有位置参数和关键字参数,位置参数一定要在关键字参数的前面,位置参数的优先级是高于关键字参数的,否则会报错 def my_abs(a,b): print(a) print(b) my_abs( ...
- C#笔记之 函数可变参数
(转自:http://blog.csdn.net/jackluangle/article/details/6539278) 其实函数的参数的可变是因为不确定函数的参数大小的原因才使用的.看下面一个列子 ...
- python学习笔记(3)--函数、参数、变量、递归
1.函数基本语法和特性 背景摘要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏出了所有的知识量吗,写出了以下代码 whi ...
- 【Go语言学习笔记】函数做参数和闭包
函数做参数 在Go语言中,函数也是一种数据类型,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型.类似于重写(同名覆盖). 回调函数:函数有一个参数是函数类型,这个 ...
- Python学习笔记——以函数为参数的内置函数
1.用法 一个参数 def ds(x): return 2 * x + 1 print(ds(5)) 11 g = lambda x : 2 * x + 1 print(g(5)) 11 两个参数 d ...
- 【Java学习笔记】函数的可变参数
package p2; public class ParamterDemo { public static void main(String[] args) { int sum1 = add(4,5) ...
- Redis源码笔记--服务器日志和函数可变参数处理server.c
前言 Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数的定义位于 server.h 和server.c 文件中,包 ...
- Lua 学习笔记(一)
Lua学习笔记 1.lua的优势 a.可扩张性 b.简单 c.高效率 d.和平台无关 2.注释 a.单行注释 -- b.多行注释 --[[ --]] 3.类型和 ...
随机推荐
- JavaScript和jQuery的学习
还有12天就要回学校了,我的假期计划还能实现吗?在这12天里,需要把JavaScript和jQuery学完.我知道这两个技术对于前端网页开发非常重要.前期把HTML和CSS学完了,学的不是特别深,只是 ...
- Charles 抓包工具的使用
抓包工具有很多,目前用过的有Charles, Fiddler, burpsuite.下面主要是Charles 的应用实例. 一. 用Charles抓包 1. PC 抓包 打开Charles, 确保“录 ...
- Debian中安装使用sudo命令
Debian中安装使用sudo命令 sudo可以让非root用户具有管理员的权限,安装好的Debian后还不能使用sudo,需要使用root用户登陆后安装sudo命令.#apt-get insta ...
- WordPress文章自动提取tag并添加链接
我们在编写文章时,经常需要添加一些标签关键词的链接,这样不仅可以优化我们的内链,对用户来说也可以参照相关的文章,如果对文章的关键字进行手动添加链接,那样对我们来说太麻烦了,而且在标签关键词很多的情况下 ...
- Oblect类之hashCode和equals
1.hashCode的默认实现.显然是一个本地方法. 2.equals的默认实现.默认equals在比较两个对象时,是看他们是否指向同一个地址的.“==”操作比较的是两个变量的值是否相等,对于引用型变 ...
- 4-es6的模块化编程
诞生背景其他都是第三方库,只有es才是官方正宗的,如果es早就制定的话,也不至于现在的这么百花齐放(混乱)的局面了 核心规范一个文件就是一个模块export是暴露出模块的公开方法import是导入 实 ...
- 【Unity3D】使用MD5值,确保本地Sqlite数据库内容没有被篡改
Sqlite的应用场景 在判断是否使用存储格式为Sqlite模式的标准,我们的标准是内容只读.也就是说,除非发布者修改Sqlite内容,玩家只有读取的权限. 换个角度说,Sqlite里面的数据都是游戏 ...
- ashx 方法模板
; ); //查询字符串拼接 string searchparams = DTRequest.GetQueryString("jsonstring"); fooddetail mo ...
- 【Error】安装程序无法打开注册表项 UNKNOWN\Components\...
在安装程序的时候出现错误信息: 解决方法: 依次点击开始,所有程序,附件,右键单击命令提示符,选择以管理员身份运行.运行secedit /configure /cfg %windir%\inf\def ...
- Django学习笔记之Cookie、Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...