2
0

DO.lua 989 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. local ReceiverBase = require("core:erm.ReceiverBase")
  2. local DO = ReceiverBase:new()
  3. function DO:new(ERM, fun, start, stop, inc)
  4. assert(fun and start and stop and inc, "!!DO requires 4 arguments")
  5. return ReceiverBase.new(self,
  6. {
  7. ERM=ERM,
  8. fun=fun,
  9. start=start,
  10. stop=stop,
  11. inc=inc,
  12. })
  13. end
  14. function DO:P(x, ...)
  15. local argc = select('#', ...)
  16. local newx = {}
  17. local ret = {}
  18. do
  19. local __iter, limit, step = tonumber(self.start), tonumber(self.stop), tonumber(self.inc)
  20. while (step > 0 and __iter <= limit) or (step <= 0 and __iter >= limit) do
  21. for idx = 1, argc do
  22. local v = select(idx, ...)
  23. if v ~= nil then
  24. newx[tostring(idx)] = v
  25. end
  26. end
  27. newx['16'] = __iter
  28. self.ERM:callFunction(self.fun, newx)
  29. __iter = newx['16']
  30. __iter = __iter + step
  31. end
  32. end
  33. for idx = 1, argc do
  34. local v = select(idx, ...)
  35. if v == nil then
  36. ret[idx] = newx[tostring(idx)]
  37. else
  38. ret[idx] = nil
  39. end
  40. end
  41. return unpack(ret)
  42. end
  43. return DO