/// <summary> /// 将lua代码片段放入函数中执行,将key/value构建为lua的单个参数传入 /// </summary> /// <param name="lua"></param> /// <param name="scriptCode"></param> /// <param name="parameters"></param> /// <returns></returns> public static object[] ExecuteLuaScript(Lua lua, string scriptCode, IEnumerable <KeyValuePair <string, object> > parameters) { if (parameters == null) { parameters = new Dictionary <string, object>(); } string json = LuaScriptRunner.ToLuaScript(parameters); json = string.IsNullOrWhiteSpace(json) ? "{}" : json; StringBuilder paramsBuilder = new StringBuilder(); IList <object> paramsValues = new List <object>(); foreach (var pair in parameters) { if (paramsBuilder.Length > 0) { paramsBuilder.Append(","); } paramsBuilder.Append(pair.Key); paramsValues.Add(pair.Value); } string script = @" function func(" + paramsBuilder + @") " + scriptCode + @" end"; return(RunLuaScript(() => { lua.DoString(script); var scriptFunc = lua["func"] as LuaFunction; var res = scriptFunc.Call(paramsValues.ToArray()); return res; })); }
/// <summary> /// 将lua代码片段放入函数中执行 /// </summary> /// <param name="lua">Lua对象</param> /// <param name="scriptCode">代码片段</param> /// <param name="parameters">参数</param> /// <returns>返回执行结果</returns> public static object[] ExecuteLuaScript(Lua lua, string scriptCode, IEnumerable <KeyValuePair <string, object> > parameters, object bodyJson) { if (parameters == null) { parameters = new Dictionary <string, object>(); } string paramsData = LuaScriptRunner.ToLuaScript(parameters); string bodyJsonLuaScript = LuaScriptRunner.ToLuaScript(bodyJson); bodyJsonLuaScript = string.IsNullOrWhiteSpace(bodyJsonLuaScript) ? "{}" : bodyJsonLuaScript; lua.DoString("params=" + paramsData); lua.DoString("bodyJson=" + bodyJsonLuaScript); LuaTable paramsTable = lua.GetTable("params"); LuaTable bodyJsonTable = lua.GetTable("bodyJson"); string script = @" function func(params,bodyJson) " + scriptCode + @" end"; return(RunLuaScript(() => { lua.DoString(script); var scriptFunc = lua["func"] as LuaFunction; var res = scriptFunc.Call(paramsTable, bodyJsonTable); return res; })); }