Program.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Lua.Runtime;
  2. using Lua;
  3. using Lua.Standard;
  4. var state = LuaState.Create();
  5. state.OpenStandardLibraries();
  6. {
  7. var closure = state.Load("return function (a,b,...) print('a : '..a..' b :'..'args : ',...) end", "@simple");
  8. using var access = state.CreateThread();
  9. {
  10. var count = await access.RunAsync(closure, 0);
  11. var results = access.ReadStack(count);
  12. for (var i = 0; i < results.Length; i++)
  13. {
  14. Console.WriteLine(results[i]);
  15. }
  16. var f = results[0].Read<LuaClosure>();
  17. results.Dispose();
  18. access.Push("hello", "world", 1, 2, 3);
  19. count = await access.RunAsync(f, 5);
  20. results = access.ReadStack(count);
  21. for (var i = 0; i < results.Length; i++)
  22. {
  23. Console.WriteLine(results[i]);
  24. }
  25. results.Dispose();
  26. }
  27. }
  28. {
  29. var results = await state.DoStringAsync(
  30. """
  31. return function (...)
  32. local args = {...}
  33. for i = 1, #args do
  34. local v = args[i]
  35. print('In Lua:', coroutine.yield('from lua', i,v))
  36. end
  37. end
  38. """, "coroutine");
  39. var f = results[0].Read<LuaClosure>();
  40. using var coroutine = state.CreateCoroutine(f);
  41. {
  42. var stack = new LuaStack();
  43. stack.PushRange("a", "b", "c", "d", "e");
  44. for (var i = 0; coroutine.CanResume; i++)
  45. {
  46. if (i != 0)
  47. {
  48. stack.Push("from C# ");
  49. stack.Push(i);
  50. }
  51. await coroutine.ResumeAsync(stack);
  52. Console.Write("In C#:\t");
  53. for (var j = 1; j < stack.Count; j++)
  54. {
  55. Console.Write(stack[j]);
  56. Console.Write('\t');
  57. }
  58. Console.WriteLine();
  59. stack.Clear();
  60. }
  61. }
  62. }