1. 简介
V-REP的语言是Lua,Lua是一门扩展式程序设计语言,没有“main”函数的概念,只能嵌入一个宿主程序中工作。
2. 基本概念
Lua是一种动态类型语言,这意味着它的变量没有类型,只有值才有类型。
Lua一共有八种类型:nil、boolean、number、string、function、userdata、 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