LuaInterface не вызывает метод
Я пытаюсь реализовать сценарии lua в моей программе на C#.NET, но когда я выполняю код, один из методов не выполняется.
Вот класс:
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" "возвращает" ноль.
2 ответа
Это зависит от того, где именно вы пытаетесь создать переменную. Если вы пытаетесь установить некоторую переменную в 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
pname
регистрируется как функция, не заданная как переменная, содержащая строковое значение.
когда message(pname)
выполняется message
функция получает значение pname
функция вместо того, чтобы получить строку (или результат вызова pname
) функция.
Чтобы передать результат pname
функция к message
вам нужно будет использовать message(pname())
,