Метатабличный / Говнокод #7195 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
-- async IO operations
-- op1.asyncRun(cb) - execute op1, and call cb(op1_result) after op1 completion

-- op1 * g - new async operation which will execute op1.asyncRun(), then execute g(op1_result).asyncRun() and return op2_result
-- op1 .. op2 - the same, but ignore result of op1. Will execute op1.asyncRun(), then op2.asyncRun() and return op2_result
private.binder = {
__mul =
        function(op1, g)
            local op = {
                asyncRun =
                    function(cb)
                        op1.asyncRun(
                            function(op1_result)
                                g(op1_result).asyncRun(cb)
                            end
                        )
                    end
            }
            setmetatable(op, private.binder)
            return op
        end,

__concat =
        function(op1, op2)
             return op1 * function(op1_result) return op2 end
        end,

__metatable = 1
}

-- примеры использования:
-- (Chatter.IO.Log("tic") .. Chatter.IO.Sleep(1000) .. Chatter.IO.Log("tac") .. Chatter.IO.Sleep(1000) .. Chatter.IO.Log("toe")).asyncRun(function() end)
-- (Chatter.IO.GetTime * Chatter.IO.Log .. Chatter.IO.Sleep(1000) .. Chatter.IO.GetTime * Chatter.IO.Log).asyncRun(function() end)

Lua.

Запостил: burdakovd burdakovd, (Updated )

Комментарии (5) RSS

  • Мне не нравится тот факт, что в луа сборщик мусора недетерминированный (насколько я прочитал). Совершенно же не подходит для встроенного использования. Напр. игровые ресурсы в опенгл можно уничтожать только в потоке опенгла, а в Луа, как я понял, сборка может произойти в любом потоке, что создаёт лишний геморрой.
    Ответить
    • я недавно играл в такое, совкового происхождения
      сэйвы грузило минуты по три
      перед удалением посмотрел - а там lua
      Ответить
    • Я, кстати, не знаю как у луа с синхронизацией объектов
      Сам луа ничего про потоки не знает, там только корутины есть

      А зачем вам думать про сборку мусора? Хотите писать деструкторы?
      Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8