Lua的一些基础常识
1.nil 空,和C#的null类似但又不同
对于全局变量和table,nil还有删除的作用,给全局变量或table表里的变量赋一个nil值,等同于把他们删掉(同时释放了内存)
nil作比较时要加上引号“”
2.Lua默认只有number一种数字类型
3.string字符串一旦赋值,就不能被修改,可以通过string.gsub()方法来修改,可以写成单引号,但是建议用双引号
当两个全是数字的字符串相加,或一个是数字一个是数字字符串时,字符串会进行类型转换,直接相加
"2" + 1 = "3" "3" + "2" = "5"
如果想连接字符串,就使用 .. 符号代替:“a”..“b”="ab"
#号可以计算字符串长度:(#“www.baidu.com”)= 13
4.常见基本语法
~= 相当于C#中的 !=
and,or,not 对应&&,||,!
局部变量,使用local修饰声明,内存在栈上,在一个函数,代码块{}内,代码块结束,内存自动释放
全局变量在堆上 ,可以随时创建,程序结束,内存自动释放
C#:public void test(){}'; Lua: function test() end
lua没有大括号{},控制语句都是 then ... end
lua没有switch结构 print()会默认换行
只有nil是false,0和1都是true
4.table(表)
table可以有数组形式,字典形式,数组字典同时混合形式
5.元表
元表可以扩展普通表的行为,普通表无法直接加减运算等,但可以用元表扩展各类功能
当使用getmetatable方法获取普通表的元表时,如果元表中含有(双下划线)__metatable键值,操作会失败,只能获取到对应的值,不能获取其他东西,用此方法可以保护已经写好的元表扩展不能被其他人获取
__index,元表的扩展方法,当访问到一个不存在的索引的时候,调用这个方法,这个方法默认返回nil
可以直接给__index 赋值一个其他的表,系统会自动寻找这个表有没有对应的值,如果有就返回,没有还是默认的nil
也可以给__index赋值一个方法,用来进行其他操作,比如直接返回设置好的变量之类的
__newindex:当我们对表的数据进行修改的时候,当我们修改的是一个新的索引的时候,也就是之前没有的索引的时候,自动调用
当修改的是一个已经存在的数据的话,不会起作用
(当我们给表添加新的键值对的时候,会调用此方法)
当__newindex 后面是函数的话,会调用此函数,如果后面跟了一个其他的表,那么会将此键值对赋值给那个表,原来的表没有变化
__add:当对两个表进行相加操作时,会起作用,并执行方法,具体结果和写的方法有关