我正在考虑在我的C#应用程序中添加脚本。我一直在Lua和C#之间进行辩论(通过CSharpCodeProvider)。
无论我使用哪种语言,我都需要脚本能够在我的主应用程序中访问/操作对象/数组。使用C#,我应该能够公开我的对象和接口函数而不会出现太多问题。
然而,对于Lua,我似乎只能通过公开的函数访问应用程序对象。我看不出我怎么能有一个非厚实的接口,例如,数组。我要么需要Array1Set(索引,值)/ Array1Get(索引)函数或ArraySet(array_no,index,value)/ ....是否有一种优雅的方式来实现它?我不想将数组复制到Lua机器,操纵它,然后将其拉回我的应用程序。
由于
答案 0 :(得分:3)
您应该看一下LuaInterface项目,该项目支持Lua和.NET之间的完全集成。向谷歌询问有关LuaInterface的更多信息,以找到许多有用的讨论,样本和想法页面。
在Lua和任何语言的任何应用程序之间共享对象的一般方法是定义包含对象实例的__index()
的{{1}}和__newindex()
元方法(可能还有其他方法)本身(让Lua的GC管理对象的生命周期)或指向实例的指针(需要与GC密切合作)。元方法允许Lua代码操纵对象的字段,就好像它们存储在Lua表中一样。