• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

LUA

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

lua5.2后, 官方建议大家放弃module/package机制, 这套机制对于使用者来说是方便的, 对于module的编写者简直要抓狂, 所有module后的函数对_G均不可见, 还要一个个手动在module前转成local调用. 相当反人类. 官方建议大家手动实现package机制. 本博客之前有实现过, 参考http://www.cppblog.com/sunicdavy/archive/2013/12/10/204696.html

由于要使用protoc-gen-lua, 这东西生成出来的lua依然使用官方的module/package机制. 对于游戏项目来说, 想进行一些自定义读取, 加密等, 就变得不可能. 幸好官方在扩展上支持的还是不错的.

参考lua5.2的官方文档http://www.lua.org/manual/5.2/manual.html#pdf-require

require时, lua会自动根据一定的搜索规律找到加载代码的方法. 这个方法定义在package.searchers这个数组中. 一共有4个加载搜索顺序

1. preload, 对已加载的module进行直接返回, 对应package.preload[modname]

2. lualoader, 对lua文件进行加载, 搜索路径为package.path

3. cloader, 对lua标准dll进行加载, 搜索路径为package.cpath

4. croot, 官方文档说的是all-in-one加载器, 感觉很神奇, 感兴趣可以自行参考源码

那么, 如果只需要自己的加载器, 只需要这样做:

 

  package.searchers[2] = function( name )
        print("try to load", name )
    end
    package.searchers[3] = nil
    package.searchers[4] = nil
    
    require "libtest"

    只保留preload功能, 然后将第二个加载器换成自己的加载函数, 第三,第四直接屏蔽

转自:http://www.cppblog.com/sunicdavy/archive/2014/04/16/206610.html

 

在使用 xlua 加载第三方库时,有时候是因为系统已经安装,但实际xlua并没有集成成功,但unity editor确能正常运行,可以将系统路径禁用:

package.searchers[4] = nil

 

 

Lua 中没有 continue 语法糖,在使用使用时有两种常用操作,一种是使用 repeat util ,一种是使用 goto,使用 goto 的代码更简洁一点。

for i =1,10,1 do
    repeat 
        if(i == 5 ) then
            break
        end 
        print(i)
    until true
end

print("-------------------------")

for i =1,10,1 do
    if(i == 5 ) then
        goto continue
    end 
    print(i)
    ::continue::
end

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua的三目运算符发布时间:2022-07-22
下一篇:
3-学习GPRS_Air202(需要知道的关于Lua的一些基本的知识)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap