Unity——Lua

阅读:http://www.runoob.com/lua/lua-tutorial.html

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Mac安装:

brew install lua

一些特性:

1、支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
2、自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
3、语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
4、通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

方法:

1、print:可以打印出语句所在位置,在开发中一般用C#暴露给Lua的log方法(自定义)

2、tostring:将基本类型转换成string类型

3、tonumber:将string类型数据强转为number类型

4、type:获取数据的类型。跟基本类型作比较时基本类型需要加上单/双引号

注释:-- 注释 --

基本类型:但在定义属性时是用local

1、nil:空值。local key = nil;

2、number:双精度类型的实浮点数。local num = 1;

3、string:字符串由单引号或双引号表示。local str = 'hello';

4、boolean:false或true。local value = false;

5、function:函数。function name()...end

6、table:表。local key = {};

7、userdata:表示任意存储在变量中的c数据结构。在ToLua框架中可以将C#的model注册后在lua中获取

8、thread:用于执行协程

循环、流程控制、函数、运算符:

for i=1,10 do
    print(i)
end
while(condition) do
    print('hello')
end
if (condition) then

elseif (condition2) then

else

end
function function_name( ... )
	-- body
end
~=	不等于,检测两个值是否相等,相等返回 false,否则返回 true
逻辑运算符:and or not 不像其他语言的& | !
..	连接两个字符串	a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
#	一元运算符,返回字符串或表的长度。    #"hello"返回5。
string.upper(argument):
字符串全部转为大写字母。
string.gsub(mainString,findString,replaceString,num)
在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)
string.lower(argument):
字符串全部转为小写字母。
string.find (str, substr, [init, [end]])
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
string.len(arg)
计算字符串长度。
 pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
 ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出
for k, v in pairs(t) do print(k, v)end
table.concat (table [, sep [, start [, end]]]):
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
table.insert (table, [pos,] value):
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
table.sort (table [, comp])
对给定的table进行升序排序。

模块和包:模块可以当作类来看待,用require引用。模块里local定义属性函数不能被外部调用。

 

Lua和C是很容易结合的,使用C为Lua写包。

与Lua中写包不同,C包在使用以前必须首先加载并连接,在大多数系统中最容易的实现方式是通过动态连接库机制。

Lua在一个叫loadlib的函数内提供了所有的动态连接的功能。这个函数有两个参数:库的绝对路径和初始化函数。

大概我看到这里就可以开始开发了。虽然lua的协程好像很多人称赞,但是我用不好就没有用。

垃圾回收器函数
Lua 提供了以下函数collectgarbage ([opt [, arg]])用来控制自动内存管理:

collectgarbage("collect"): 做一次完整的垃圾收集循环。通过参数 opt 它提供了一组不同的功能:

collectgarbage("count"): 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。

collectgarbage("restart"): 重启垃圾收集器的自动运行。

collectgarbage("setpause"): 将 arg 设为收集器的 间歇率 (参见 §2.5)。 返回 间歇率 的前一个值。

collectgarbage("setstepmul"): 返回 步进倍率 的前一个值。

collectgarbage("step"): 单步运行垃圾收集器。 步长"大小"由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。

collectgarbage("stop"): 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。
错误处理
我们可以使用两个函数:assert 和 error 来处理错误
协程coroutine
coroutine.create()	创建coroutine,返回coroutine, 参数是一个函数,当和resume配合使用的时候就唤醒函数调用
coroutine.resume()	重启coroutine,和create配合使用
coroutine.yield()	挂起coroutine,将coroutine设置为挂起状态,这个和resume配合使用能有很多有用的效果
coroutine.status()	查看coroutine的状态
注:coroutine的状态有三种:dead,suspend,running,具体什么时候有这样的状态请参考下面的程序
coroutine.wrap()	创建coroutine,返回一个函数,一旦你调用这个函数,就进入coroutine,和create功能重复
coroutine.running()	返回正在跑的coroutine,一个coroutine就是一个线程,当使用running的时候,就是返回一个corouting的线程号

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值