为了搞unity的热更新,需要用到lua.
lua是什么东西?一种脚本语言。脚本语言一般轻量,简单.
js大家都很熟悉吧。因此我拿它与lua对比
相同点-----------------------------------------------------
类型都差不多,追求简单。
string/string
number/number
boolean/boolean
function/function 都是作为第一类,也可作为参数,可变参数也都是...
Object/table property/metatable 原型链 __index里面的元素不被修改
null|underfined/nil
var(es3)/local 不定义是全局
coroutine/async 协程(协程实际上只是使函数可以暂停自身执行(使用coroutine.yield),可以从外部恢复(使用coroutine.resume)的一种方法)
window|global/_G 定义的全局变量
不同点----------------------------------------------------
js有变量提升 lua没有变量提升
js块是放在{}中的 lua中块是以end结束
js==,===,!=和!==运算符的优先级低于>,>=,<,<=。 lua中 所有比较运算符都具有相同的优先级。
js全局变量存在window中 lua全局变量存在_G中
js模块化 import/export lua模块化require/return(实质上就是函数)
js的运算符+有两重性(连接符,运行算), lua的运算符+只表示运算符,lua的连接符用...
js判断相等 “5”==5 true lua判断相等 "5"==5 false;
js判断不等 5 != "5" lua判断不等 5 ~= "5"
js逻辑运算符&& || ! lua逻辑运算符 and or not
js正则表达式转义字符用 lua正则表达式转义字符用%
js有表示空有两种null, underfined lua表示空用用nil
js表示串块`` lua表示字符串块 [[]]
js表里的初始索引以0开始 lua表里的初始索引以1开始
js有array类型 lua里没有,用table充当
js有局部变量/全局变量通过作用域区分 lua通过关键字区分
js中转化为valueof, {toString:function()} lua setmetatable({},{__toString})
---调用方式的不同---
js基本类型的用法 str., arr., i++ lua string. tabel. i++无所使用
---tabel相关的方法--- 很简单 concat,insert,remove,sort
1:js arr转化为字符串 arr.join(",") lua 中数组转化为字符串 table.concat(table, ",")
2:js arr插入,删除 shift,pop,splice,unshift,push lua中 tabel.insert(tabel, ele), tabel.remove(tabel, ele)
3:js排序 arr.sort lua中 table.sort(table, ...)
---function相关的方法---
1:js函数作为第一对象 lua函数作为第一对象
2:js函数有作用域 var lua函数也有作用域 local
3:js闭包,所谓的闭包就是用域产生的 lua与js的闭包一样
---调试---
lua是比较严谨的语言
用next找不到是会报错的
总结
lua比js更简单。。。,如果你真的会了js,那你也就会了lua.
lua就是缩量版的js, 去掉了变量提升,去掉了操作符的多义性, 弱化了原型链, 简化了api
半小时就能入门