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)
时间: 2024-10-08 21:06:01

Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组的相关文章

lua学习笔记之函数

Lua学习笔记之函数 1.  函数的作用 函数主要完成指定的任务,这样的情况下函数作为调用语句使用,函数可以计算并返回值,这样的情况下函数作为赋值语句的表达式使用. 语法: funcationfunc_name(arguments-list) Statements-list end 调用函数的时候,如果参数列表为空,必须使用()表示是函数调用. Print(8*9,9/8) a = math.sin(3) +math.cos(10) print(os.date()) 上述规则有一个例外,当函数只

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性

Python新手学习基础之函数-可变参数*

可变参数( * ) 可变参数,顾名思义,它的参数是可变的,比如列表.字典等.如果我们需要函数处理可变数量参数的时候,就可以使用可变参数. 我们在查看很多Python源码时,经常会看到 某函数(*参数1, **参数2)这样的函数定义,这个*参数和**参数就是可变参数,一时会让人有点费解.其实只要把函数可变参数的定义搞清楚了,就不难理解了. 当我们不知道需要用几个参数来定义函数的时候,可变参数就可以大展手脚了. 在Python里,带 * 的参数就是用来接受可变数量参数的. 如果一个函数定义如下: d

lua学习笔记---注释,变量,字符串

1. 注释 单行注释  "--" 相当于"//" 多行注释 "--[[ ]]" 相当于/*  */ 转义嵌套注释 --[==[  ]==] 其中=的个数不限,但个数必须对等. 2. 变量 关键字保留 if else elseif then end for break do nil(null) local function while in and or false true until lua变量 分为 全局变量和局部变量 其所有的全局变量保存在

Java私人学习笔记——第2章 数据类型和运算符

2.2 数据类型 2.2.1 Java数据类型 2.3 常用运算符 Java提供了一组运算符丰富的操纵变量.我们可以把所有的Java操作符为以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其它运算符 算术运算符: 算术运算符用于在数学表达式中,他们是在代数中使用的方法相同.下表列出了算术运算符: 假设整型变量A=10和变量B=20,则: 算术运算实例 运算符 描述 实例 + Addition - Adds values on either side of the opera

Lua学习笔记(五):函数

函数有两种用途: 1).完成指定的任务,这种情况下函数作为调用语句使用: 2).计算并返回值,这种情况下函数作为赋值语句表达式使用. 1 function func_name (arguments-list) 2 statements-list; 3 end; 4 5 --调用函数的时候,如果参数列表为空,必须使用()表明是函数调用 6 print(8*9, 9/8) 7 a = math.sin(3) + math.cos(10) 8 print(os.date()) 9 10 --上述规则有

Lua学习笔记(六):函数-续

Lua中的函数是带有词法定界(lexical scoping)的第一类值(first-class values).第一类值指:在Lua中函数和其他值(数值.字符串)一样,函数可以被存放在变量中,也可以存放在表中,可以作为函数的参数,还可以作为函数的返回值.词法定界指:嵌套的函数可以访问他外部函数中的变量.这一特性给Lua提供了强大的编程能力. Lua中关于函数稍微难以理解的是函数也可以没有名字,匿名的.当我们提到函数名(比如print),实际上是说一个指向函数的变量,像持有其他类型的变量一样:

php课外笔记--函数可变参数列表的实现

php课外笔记--函数可变参数列表的实现 php的函数方面非常强大,但对于一些php新手来说,理解有部分困难,不能完全熟练的掌握. php培训教程中,介绍一部分函数可变参数列表的实现方法: PHP函数可变参数列表的实现方法主要是利用func_get_args().func_num_args().func_get_arg()这三个系统函数来实现的,其中func_get_args()函数以数组的形式获得参数列表,具体用法参看手册. PHP函数可变参数列表代码如下: < ?php    /*   函数

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含