using SolarSharp.Interpreter;using SolarSharp.Interpreter.DataTypes;var script = new Script();// Define a function in Luascript.DoString(@" function add(a, b) return a + b end function makeCounter() local count = 0 return function() count = count + 1 return count end end");// Get and call a simple functionClosure addFunc = script.Globals.Get("add").Function;LuaValue result = addFunc.Call(10, 20);Console.WriteLine(result.Number); // 30// Use as a delegateScriptFunctionDelegate<double> addDel = addFunc.GetDelegate<double>();double sum = addDel(5, 7); // 12.0// Get a closure with upvaluesLuaValue counterFunc = script.Call(script.Globals.Get("makeCounter"));Closure counter = counterFunc.Function;Console.WriteLine($"Upvalues: {counter.GetUpvaluesCount()}"); // 1 (count variable)Console.WriteLine($"Upvalue name: {counter.GetUpvalueName(0)}"); // "count"// Call the counter multiple timesConsole.WriteLine(counter.Call().Number); // 1Console.WriteLine(counter.Call().Number); // 2Console.WriteLine(counter.Call().Number); // 3// Inspect and modify upvalueLuaValue countUpvalue = counter.GetUpvalue(0);Console.WriteLine($"Current count: {countUpvalue.Number}");countUpvalue.Assign(LuaValue.NewNumber(100));Console.WriteLine(counter.Call().Number); // 101