private static int Print(IntPtr L)
{
try
{
int n = LuaDLL.lua_gettop(L);
var sb = new StringBuilder();
//获得当前运行的函数的上一个调用层的信息,返回行数,把调用层的名称入栈
int line = LuaDLL.jlua_where(L, 1);
string filename = LuaDLL.lua_tostring(L, -1);
LuaDLL.lua_settop(L, n);
int offset = filename[0] == '@' ? 1 : 0;
sb.Append('[').Append(filename, offset, filename.Length - offset).Append(':').Append(line).Append("]:");
for (int i = 1; i <= n; i++)
{
if (i > 1)
{
sb.Append(" ");
}
if (LuaDLL.lua_isstring(L, i) == 1)
{
sb.Append(LuaDLL.lua_tostring(L, i));
}
else if (LuaDLL.lua_isnil(L, i))
{
sb.Append("nil");
}
else if (LuaDLL.lua_isboolean(L, i))
{
sb.Append(LuaDLL.jlua_toboolean(L, i) ? "true" : "false");
}
else
{
IntPtr p = LuaDLL.lua_topointer(L, i);
if (p == IntPtr.Zero)
{
sb.Append("nil");
}
else
{
sb.Append(LuaDLL.luaL_typename(L, i)).Append(":0x").Append(p.ToString("X"));
}
}
}
Debug.Log(sb.ToString());
return(0);
}
catch (Exception e)
{
throw e;
}
}