zoukankan      html  css  js  c++  java
  • 关于C#调用XLua的函数抛出attempt to call a nil value (global 'print')

    网上有很多解决异常:attempt to call a nil value (global 'print')的方法,但是我发现都是错误的。因为我试了好几个,然后最后才发现都是错误的。

    说说我的解决方法吧。

    抛出异常的代码如下:

    public class LuaDemoScript : MonoBehaviour
    {
        public TextAsset textAsset;
        public CMyClass[] lists;
        private LuaTable runTable;
    
        internal static LuaEnv luaEnv = new LuaEnv();
    
        public void Awake()
        {
            runTable = luaEnv.NewTable();
            LuaTable metaTable = luaEnv.NewTable();
            metaTable.Set("_index", luaEnv.Global);
            runTable.SetMetaTable(metaTable);
            metaTable.Dispose();
    
            runTable.Set("self", this);
            for(int i = 0;i < lists.Length; i++)
            {
                runTable.Set(lists[i].name, lists[i].go);
            }
    
             luaEnv.DoString(textAsset.text,"LuaDemo.lua", runTable);
    
        }
    }

    上面的代码看红色字体。它这里有点问题,原因是它的元方法没有_index方法

    所以它会抛出很多异常。如果是有关attempt to call a nil value (global 'print')的异常,比如:attempt to call a nil value (global 'xxx')的话也可以使用这个方法

    上面说到XLua是没有"_index"元方法,但是它有"__index"方法。

    所以我们需要把上面的"_index"改为"__index"方法就可以了。

    上面的代码改正如下:

    public class LuaDemoScript : MonoBehaviour
    {
        public TextAsset textAsset;
        public CMyClass[] lists;
        private LuaTable runTable;
    
        internal static LuaEnv luaEnv = new LuaEnv();
    
        public void Awake()
        {
            runTable = luaEnv.NewTable();
            LuaTable metaTable = luaEnv.NewTable();
            metaTable.Set("__index", luaEnv.Global);
            runTable.SetMetaTable(metaTable);
            metaTable.Dispose();
    
            runTable.Set("self", this);
            for(int i = 0;i < lists.Length; i++)
            {
                runTable.Set(lists[i].name, lists[i].go);
            }
    
             luaEnv.DoString(textAsset.text,"LuaDemo.lua", runTable);
    
        }
    }

    上面是两个_而不是一个_

    希望本文章对你有帮助。

  • 相关阅读:
    MySQL简单实现多字段模糊查询【转】
    PHP检测URL格式是否正确域名地址是否有效【转】
    php如何判断IP为有效IP地址【转】
    PHP isset() 函数使用【转】
    php生成唯一随机码【转】
    php判断一个值是否在数组中【转】
    Win10系统gpedit.msc文件找不到,如何解决【转】
    B
    【金色】种瓜得瓜,种豆得豆 Gym
    J
  • 原文地址:https://www.cnblogs.com/LixiaoFeng1650062546/p/13038800.html
Copyright © 2011-2022 走看看