我试图在我的C#.NET程序中实现lua脚本,但是当我执行代码时,其中一个方法没有被执行。
这是班级:
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代码"消息(pname)"它甚至没有尝试执行方法" playername()"返回一些值,因此它会在DoString()行中崩溃,因为" pname"是"返回"空。
答案 0 :(得分:0)
pname
被注册为未设置为包含字符串值的变量的函数。
执行message(pname)
时,message
函数被赋予pname
函数的值而不是给出字符串(或调用的结果 pname
)函数。
要将pname
函数的结果传递给message
,您需要使用message(pname())
。
答案 1 :(得分:0)
这取决于您尝试创建变量的确切位置。如果您尝试在Lua中设置某个变量,那么lua["somevariable"] = "value";
将起作用。一个更完整的例子可能是:
将原始值传递给州:
double val = 12.0;
lua["x"] = val; // Create a global value 'x'
var res = lua.DoString ("return 10 + x*(5 + 2)")[0] as double;
检索全局值:
lua.DoString ("y = 10 + x*(5 + 2)");
var y = lua["y"] as double; // Retrieve the value of y