Lua基本语法
1简介
由cleanC实现。需要被宿主程序调用,可以注入C函数。
2语法约定
Lua的语法基于BNF的语法规则。
Lua对大小写敏感。
2.1保留关键字
C语言中没有的关键字有:
andelseiffunction innillocalnotor repeatthenuntil
规范:全局变量以下划线开头。
2.2操作符
C语言中没有的操作符:
^
~=
// --向下取整
Lua中没有的操作符:
+=
-=
2.3字符串定义
采用转义符:通过转义符表示那些有歧义的字符
字符表示
a --代表字符a
\97 --代表字符a
\049 --代表数字字符1
其他转义符表示
\\n --代表字符串\n
\n --代表换行
注意数字字符必须是三位。其他字符则不能超过三位。
采用长括号:长括号内的所有内容都作为普通字符处理。
[[]] --0级长括号
[==[]==] --2级长括号
3值与类型
Lua是动态语言,变量没有类型,值才有。值自身携带类型信息。
Lua有八种基本数据类型:nil,boolean,number,string,function,userdata,thread,table。
仅nil和false导致条件为假,其他均为真。
userdata类型变量用于保存C数据。Lua只能对该类数据进行使用,而不能进行创建或修改,保证宿主程序完全掌握数据。
thread用于实现协程(coroutine)。
table用于实现关联数组。table允许任何类型的数据做索引,也允许任何类型做table域中的值(前述
任何类型不包含nil)。table是Lua中唯一的数据结构。
由于函数也是一种值,所以table中可以存放函数。
function,userdata,thread,table这些类型的值都是对象。这些类型的变量都只是保存变量的引用,并且在进行赋值,参数传递,函数返回等操作时不会进行任何性质的拷贝。
库函数type()返回变量的类型描述信息。
3.1强制转换
Lua提供数字与字符串间的自动转换。
可以使用format函数控制数字向字符串的转换。
4变量
变量有三种类型:全局变量、局部变量、表中的域。
函数外的变量默认为全局变量,除非用local显示声明。函数内变量与函数的参数默认为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束(或者是直到下一个同名局部变量的声明)。
变量的默认值均为nil。
a=5 --全局变量 localb=5 --局部变量 functionjoke() c=5 --局部变量 locald=6--局部变量 end print(c,d) -->nilnil do locala=6--局部变量 b=6 --全局变量 print(a,b);-->66 end print(a,b) -->56
方便标记,-->代表前面表达式的结果。
4.1索引
对table的索引使用方括号[]。Lua使用语法糖提供.操作。
t[i]
t.i --当索引为字符串类型时的一种简化写法
gettable_event(t,i)--采用索引访问本质上是一个类似这样的函数调用
4.2环境表
所有全局变量放在一个环境表里,该表的变量名为_env。对某个全局变量a的访问即_env.a(_env_只是为了方便说明)。
每个函数作为变量持有一个环境表的引用,里面包含该函数可调用的所有变量。
子函数会从父函数继承环境表。
可以通过函数getfenv/setfenv来读写环境表。
以上所述就是本文的全部内容了,希望大家能够喜欢。