Lua学习笔记-day10:错误处理、调试、垃圾回收、面向对象、数据库访问

一、Lua错误处理

  1. 错误类型:语法错误、运行错误。

  2. 错误处理:

    1. assert()函数:

      1. 功能:检查第一个参数是否为true,如果不为true则将第二个参数作为错误信息抛出。

      2. 示例:

        1. function add(a, b)

          1. assert(type(a) == 'number', 'a is not a number.')

          2. assert(type(a) == 'number', 'b is not a number.')

          3. return a + b

        2. end

    2. error(message [, level])函数:

      1. 功能:终止正在执行的函数,并返回message作为错误信息。

      2. level参数:

        1. level = 0: 不添加错误位置信息。

        2. level = 1: 显示调用error的位置(文件名+error所在的行号)。默认值为1.

        3. level = 2: 显示调用error的函数的调用位置(文件名+调用error的函数所在的行号)。

    3. pcall(), xpcall(), debug

二、Lua调试(Debug)

三、Lua垃圾回收

  1. Lua采用了自动内存管理。Lua中所有用到的内存,如:字符串、表、用户数据、函数、线程、内部结构等,都服从自动管理。

  2. 垃圾收集器间歇率:

    1. 采用百分制(值100在内部表示为1)。

    2. 作用:控制收集器在开启新的循环前需要等待多久。

    3. 说明:

      1. 增大这个值会减少收集器的积极性。

      2. 该值小于100时,收集器在开启新的循环时,不会等待;

      3. 该值为200时,收集器会等到总内存使用量,达到之前的两倍时,才开启新的循环;

  3. 垃圾收集器步进倍率:

    1. 采用百分制(值100在内部表示为1)。

    2. 作用:控制收集器运作速度相对于内存分配速度的倍率。

    3. 说明:

      1. 增大这个值会增加收集器的积极性;而且会增加每个增量步骤的长度;

      2. 该值小于100时,收集器工作速度太慢,以至于永远干不完一个循环;

      3. 该值为200时,表示收集器以内存分配的两倍速工作;

  4. 垃圾回收器函数 collectgarbage ([opt [, arg]])用来控制自动内存管理 :

    1. collectgarbage('collect'): 做一次完整的垃圾收集循环;

    2. collectgarbage('count'): 返回Lua所使用的内存总量(单位: Kb);

    3. collectgarbage('restart'): 重启垃圾收集器的自动运行;

    4. collectgarbage('setpause'): 将arg设置为垃圾收集器间歇率,并返回上一个值;

    5. collectgarbage('setstepmul'): 返回步进倍率的前一个值;

    6. collectgarbage('step'): 单步运行垃圾收集器;

    7. collectgarbage('stop'): 停止垃圾收集器的自动运行;通过collectgarbage('restart')可以重启垃圾收集器的自动运行;

四、Lua面向对象

五、Lua数据库访问

  1. luaSQL: 

    1. 开源库。

    2. lua数据库的操作库。

    3. 支持的数据库:ODBC、ADO、Oracle、MySQL、SQLite和PostgreSQL。

  2. LuaRocks:

    1. 作用:

      1. lua的模块管理工具:可以安装和更新lua的第三方模块。

      2. 使用某种数据库(如: sqlite3)前,需要安装其数据库驱动,可以使用luarocks安装所需的数据库的驱动。

    2. 安装:

      1. http://luarocks.org/releases/ 页面选择需要的软件包。

      2. ./configure --prefix=/usr/local/luarocks

      3. make && make install

    3. 使用:

      1. sudo luarocks install luasql-sqlites

      2. 说明:

        1. 上述指令运行完成后,在/usr/local/luarocks/lib/lua/5.3/luasql目下安装了sqlite3.so文件。

        2. 创建软链接:sudo ln -s /usr/local/luarocks/lib/lua/5.3/luasql/sqlite3.so /usr/local/lib/lua/5.3/luasql/sqlite3.so后,在lua文件中通过require "luasql.sqlite3",可以成功加载sqlite3数据库驱动。

  3. sqlite3数据库使用示例:

    1. sqlite3 = require "luasql.sqlite3"

    2. env = sqlite3.sqlite3()

    3. db = env:connect("./test.db")

    4. db:execute [[DROP TABLE people]]

    5. db:execute [[CREATE TABLE people(name varchar(10), age int(3))]]

    6. db:execute [[INSERT INTO people(name, age) values('lfc', 28)]]

    7. db:execute [[INSERT INTO people(name, age) values('mzh', 29)]]

    8. cur = db:execute [[SELECT * FROM people]]

    9. colnames = cur:getcolnames()

    10. coltypes = cur:getcoltypes()

    11. for k, v in pairs(colnames) do print(k, v) end

    12. for k, v in pairs(coltypes) do print(k, v) end

    13. function rows(cur)

      1. return function(cur)

        1. local tt = {}

        2. ret = cur:fetch(tt, 'a')

        3. if (nil ~= ret) then

          1. return tt

        4. else

          1. return nil

        5. end

      2. end, cur

    14. end

    15. for tt in rows(cur) do

      1. for k, v in pairs(tt) do print(k, v) end

    16. end

    17. cur:close()

    18. db:close()

    19. env:close()

    20. 参考:https://www.cnblogs.com/windtail/archive/2012/01/08/2623191.html

  4. 依赖库

    1. lua:

      1. libreadline6

      2. libreadline6-dev //需要<readline/readline.h>

    2. luarocks:

      1. 安装sqlite3数据库驱动前需要首先安装sqlite3:

        1. sqlite3

        2. libsqlite3-dev //需要sqlite3.h

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值