V-REP学习笔记(四):认识Lua

1. 简介

V-REP的语言是Lua,Lua是一门扩展式程序设计语言,没有“main”函数的概念,只能嵌入一个宿主程序中工作。

2. 基本概念

Lua是一种动态类型语言,这意味着它的变量没有类型,只有值才有类型。

Lua一共有八种类型:nilbooleannumberstringfunctionuserdata、 thread 和 table。

nil是一个空指针,nil和false都会导致判断为假,boolean,string都和c里面差不多,number则包括整形数和浮点数。function就是自定义一个可调用的函数。userdata类型允许将C中的数据保存在Lua变量中。thread类型表示一个独立的执行序列,被用于实现协程,协程在Lua中代表了一段独立的执行线程。table是一个关联数组,是Lua中唯一的数据结构,可以表示数组,序列,集合,图,树等。

3.语言定义

3.1 词法约定

一些保留关键字,不可用于变量名

另外需要注意的是,Lua对大小写敏感。

Lua的变量支持0x表示的十六进制常量,支持字符'e'表示的指数形式。

Lua的注释包括行注释和段注释,行注释以‘--’开头,段注释以‘--[[’开头,‘]]’结尾。

Lua中没有显式声明为局部变量的变量名均视为全局变量,局部变量声明以‘local’开头。

Lua的赋值除了支持正常C中的赋值操作外,还有一些额外的骚操作。比如

x, y = y, x

注意,在这个表达式执行之前x,y的值已经被计算出来,所以这里就是简单的交换x,y的值而不会出现x=y,y=x=y这种结果。

最后就是return,Lua的return支持返回多个参数值,比如return x,y,z

3.2 控制结构

常见的有if,while,repeat

for循环的一般形式如下,三个参数依次为起始条件,终止条件(包含终止条件)和步长。

Lua也可以通过break来跳出上述循环

还有类似汇编中的label和goto指令

3.3 表达式

1)运算符

Lua支持C中的数学运算符,还多了两个,一个是‘//’,向下取整除法,一个是‘^’,乘方。Lua对整形数溢出的处理同C一致,这里的整形数长度一般是64位。

Lua也支持C中的位操作符,包括&(按位与),|(按位或),~(按位非),>>(右移),<<(左移),以及C中的关系运算符,==(等于),~=(不等),<=(小于等于)……

2)字符操作(详见第4部分)

字符串连接(‘..’),比如

print("abcd".."efg")

取长度运算(‘#’)

3)优先级

从低到高

3.4 表构建

Lua的表有点像字典,包含键和值两部分,一般情况下,表依次序赋值,当然也可以指定赋值,比如

3.5 函数语法.

Lua中的函数定义以function打头,end结尾,与C不同的是,Lua没有重载的概念,但是可以自适应地调整实参列表,只需在函数形参后面加上(‘...’),比如

function f(a, b) end
function g(a, b, ...) end
function r() return 1,2,3 end

调用时实参到形参的映射关系

4. 字符串

Lua中字符串有三种定义方式

1)单引号间的一串字符

2)双引号间的一串字符

3)[[和]]间的一串字符

Lua提供了很多方法支持字符串的操作

1)string.upper(argument):字符串全部转化为大写

2)string.lower(argument):字符串全部转化为小写

3)string.gsub(mainString,findString,replaceString,num):在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换),如:

> string.gsub("aaaa","a","z",3);
zzza    3

4)string.find (str, substr, [init, [end]]):在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。[init, [end]]是Lua的一个特殊用法,代表可选参数。

> string.find("Hello Lua user", "Lua") 
7

5)string.reverse(arg):字符串反转

6)string.char(arg) 和 string.byte(arg[,int]):char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。

> string.char(97,98,99,100)
abcd
> string.byte("ABCD",4)
68
> string.byte("ABCD")
65

7)string.len(arg):计算字符串长度。

8)string.rep(string, n):返回字符串string的n个拷贝

> string.rep("abcd",2)
abcdabcd

参考:http://www.runoob.com/manual/lua53doc/

猜你喜欢

转载自blog.csdn.net/banzhuan133/article/details/86022289
今日推荐