FU.lua 649 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. local ReceiverBase = require("core:erm.ReceiverBase")
  2. local FU = ReceiverBase:new()
  3. function FU:new(ERM, fun)
  4. assert(fun, "!!FU requires 1 argument")
  5. return ReceiverBase.new(self,
  6. {
  7. ERM=ERM,
  8. fun=fun,
  9. })
  10. end
  11. function FU:P(x, ...)
  12. local argc = select('#', ...)
  13. local newx = {}
  14. local ret = {}
  15. for idx = 1, argc do
  16. local v = (select(idx, ...))
  17. idx = tostring(idx)
  18. if v ~= nil then
  19. newx[idx] = v
  20. end
  21. end
  22. self.ERM:callFunction(self.fun, newx)
  23. for idx = 1, argc do
  24. local v = (select(idx, ...))
  25. if v == nil then
  26. ret[idx] = newx[tostring(idx)]
  27. else
  28. ret[idx] = nil
  29. end
  30. end
  31. return unpack(ret)
  32. end
  33. return FU