首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LuaInterface未调用方法

LuaInterface未调用方法
EN

Stack Overflow用户
提问于 2014-11-24 08:40:46
回答 2查看 202关注 0票数 0

我试图在我的C#.NET程序中实现lua脚本,但是当我执行代码时,其中一个方法没有被执行。

下面是这个类:

代码语言:javascript
复制
namespace Program1
{
    public class LuaFunctions
    {
        Client Client { get; set; }
        private Lua lua { get; set; }

        public LuaFunctions(Client c) {
            this.Client = c;
            this.lua = new Lua();

            registerFunctions();
        }

        public void ExecuteCode(string code)
        {
            this.lua.DoString(code);
        }

        private void registerFunctions()
        {
            lua.RegisterFunction("message", this, this.GetType().GetMethod("Message"));
            lua.RegisterFunction("pname", this, this.GetType().GetMethod("playername"));
        }

        public void Message(string s)
        {
            System.Windows.Forms.MessageBox.Show(s);
        }

        public string playername()
        {
            return Client.Player.Name;
        }
   }
}

当我执行这行lua代码"message(pname)“时,它甚至没有尝试执行方法"playername()”来返回某个值,因此它在DoString()行中崩溃,因为"pname“是”返回“null。

EN

回答 2

Stack Overflow用户

发布于 2014-11-24 21:33:41

pname正在注册为函数,而不是设置为包含字符串值的变量。

在执行message(pname)时,将为message函数提供pname函数的值,而不是提供字符串(或调用pname函数的结果)。

要将pname函数的结果传递给message,您需要使用message(pname())

票数 0
EN

Stack Overflow用户

发布于 2015-02-12 21:31:48

这取决于您尝试创建变量的确切位置。如果你想在Lua中设置一些变量,那么lua["somevariable"] = "value";将会起作用。一个更完整的例子可能是:

将原始值传递给状态:

代码语言:javascript
复制
double val = 12.0;
lua["x"] = val; // Create a global value 'x' 
var res = lua.DoString ("return 10 + x*(5 + 2)")[0] as double;

检索全局值:

代码语言:javascript
复制
lua.DoString ("y = 10 + x*(5 + 2)");
var y = lua["y"] as double; // Retrieve the value of y
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27096265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档