找回密码
 立即注册
查看: 261|回复: 0

XLua记录

[复制链接]
发表于 2021-8-11 15:56 | 显示全部楼层 |阅读模式
1.ipairs 和 pairs 对待nil成员的区别

function Test:Show()    local t = { name = {1, 2, 3}, name1 = {4,5,6}, name2 = {7,8,9}, name3 = {10, 11, 12} }    t.name2 = nil    local t1 = {{1}, {4, 5}, {7,8}, {10, 11, 12} }    t1[2] = nil    for k,v in pairs(t) do        Logger.Log(Logger.Module.COMMON, k)        Logger.Log(Logger.Module.COMMON, #v)    end    for k,v in ipairs(t1) do        Logger.Log(Logger.Module.COMMON, k)        Logger.Log(Logger.Module.COMMON, #v)    endend输出:


可以看到pairs对待table中的nil, 不会截断后续的输出。而ipairs对待table中nil, 会截断后面的输出内容。
2.遍历animation

方法1:
        local iter = t_animation:GetEnumerator()        while iter:MoveNext() do                local v = iter.Current                v.speed = show and 1.0 or -1.0        end方法2:
    for k,v in pairs(t_animation) do            v.speed = show and 1.0 or -1.0    end3.this[string field]或者this[object field]操作符重载为什么在lua无法访问?(比如Dictionary<string, xxx>, Dictionary<object, xxx>在lua中无法通过dic['abc']或者dic.abc检索值)

因为:1、这个特性会导致基类定义的方法、属性、字段等无法访问(比如Animation无法访问到GetComponent方法);2、key为当前类某方法、属性、字段的名字的数据无法检索,比如Dictionary类型,dic['TryGetValue']返回的是一个函数,指向Dictionary的TryGetValue方法。
如果你的版本大于2.1.11,可以用get_Item来获取值,用set_Item来设置值。要注意只有this[string field]或者this[object field]才有这两个替代api,其它类型的key是没有的。
dic:set_Item('a', 1)dic:set_Item('b', 2)print(dic:get_Item('a'))print(dic:get_Item('b'))如果你的版本小于或等于2.1.11,建议直接方法该操作符的等效方法,比如Dictionary的TryGetValue,如果该方法没有提供,可以在C#那通过Extension method封装一个使用。
4.xLua虚拟机的重启

在热更新机制中,如果在热更新完成后,需要重启lua虚拟机,在xlua的机制下,需要注意,重启lua虚拟机的操作,不能来自于lua端,只能是来自于c#端,也就是lua不能自己调用自己的重启。
5.子类加了LuaCallCSharp 基类需要加吗

   xLua只会生成加了该配置的类型,不会自动生成其父类的适配代码,当访问子类对象的父类方法,如果该父类加了LuaCallCSharp配置,则执行父类的适配代码,否则会尝试用反射来访问。
  反射访问除了性能不佳之外,在il2cpp下还有可能因为代码剪裁而导致无法访问,后者可以通过下面介绍的ReflectionUse标签来避免。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 07:39 , Processed in 0.088300 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表