Пример #1
0
        /// <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;
            }));
        }
Пример #2
0
        /// <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;
            }));
        }