Lua语法
--注释
#字符串长度、table从1开始连续元素的长度
..字符串拼接
逻辑运算符 and or not
条件语句
if xxx then
elseif yyy then
else
end
循环语句
for i=1,xxx do
end
xLua
'AppDomain' does not contain a definition for 'DefineDynamicAssembly':找不到AppDomain下的DefineDynamicAssembly方法
解决方法:把报错扔给百度查,得到下面的文章。
C#反射中使用到Emit时,发现AppDomain.CurrentDomain.DefineDynamicAssembly()方法并不存在 - 名字已被使用N次 - 博客园 (cnblogs.com)
里面让把AppDomain.CurrentDomain替换成AssemblyBuilder,照做,解决。原因应该是微软把这个方法移动地方了,且改成了静态方法。
百度查DefineDynamicAssembly,能看到官方文档里有两个类里出现这个方法。
AppDomain的适用版本:
AssemblyBuilder的适用版本:
创建运行环境报错xlua assembly:<unknown assembly> type:<unknown type> member:(null)
原因:没把Plugin文件夹拷过来
Lua里调用C#的委托报错InvalidOperationException: not a generic method definition
C#代码
Lua代码
报错:not a generic method definition
C#里添加并执行委托没错,Lua直接执行Func1()也没错。如果改成一个根本不存在的成员:
报错会不一样:
说明xLua是能找到这个成员的,但是不允许把函数赋给它。打印MyStaticDelegate,是nil,类型也是nil。给它赋一个整数,不报错,打印,还是nil,执行,报错说不能执行nil。
这是C#里定义的一个类:
在lua里遍历它:
结果:
发现它含有NPC里的静态成员,但是静态字符串name和静态委托MyStaticDelegate不见了,但是有一个UnderlyingSystemType,类型是NPC。
然后试图把NPC实例化一个对象,对这个对象遍历:
得到报错:ob是NPC类型,不是table,不能遍历:
遍历了一下CS,以为会有很多东西:
结果:
连我定义的NPC类也没有。
解决方法:在C#定义的无参无返回值委托、传入自身的委托前面加[CSharpCallLua],不管是在Lua使用C#委托,还是C#委托接收Lua函数,都要加。有参且不为表自身的委托(如传入字符串、整数)可以不加。
不要用print(CS.成员)验证一个成员存不存在,就算不存在,也会添加这个成员,类型是table。下图:print CS里一个根本不存在的成员,发现它有值,而且遍历显示这个成员已经被创建出来了:

Sublime Text问题
不识别粘贴来的空格
有时执行代码会报这种有�的错
经检查发现这是被识别的空格,里面有一点:
这是没被识别的空格,里面没有一点: