namespace Lua; partial class LuaFunction { sealed class AnonymousLuaFunction(Func> func) : LuaFunction { protected override async ValueTask InvokeAsyncCore(LuaFunctionExecutionContext context, Memory buffer, CancellationToken cancellationToken) { var args = context.ArgumentCount == 0 ? [] : new LuaValue[context.ArgumentCount]; context.Arguments.CopyTo(args); var result = await func(args, cancellationToken); if (result != null) { result.AsMemory().CopyTo(buffer); return result.Length; } else { return 0; } } } public static LuaFunction Create(Func> func) { return new AnonymousLuaFunction(func); } }