Program.cs 1.9 KB

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