Size: a a a

2020 February 07

f

fgntfg in pro.lua
Snusmumriken
И итерировать придётся pairs'ом.

А теперь сделай то же самое на сишной стороне : )
nextом же.

А на си это тоже можно. Там с динамическими структурами и не такое можно. У тебя, по сути - двунаправленный список. Или 2 вектора, в одном у тебя имена объектов, а во втором - адрес.
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Ты так автоматически запрещаешь использовать одну и ту же функцию несколько раз с разными таймаутами. За этим там и id, чтобы точно идентифицировать, что именно ты удаляешь.
Зачем вообще таймауты нужны блин? Если просто сделать типа removeEventHandler("onSome",prevAddedFunc)
источник

S

Snusmumriken in pro.lua
Тебе захотелось вызывать одну функцию несколько раз на один колбек : )
источник

S

Snusmumriken in pro.lua
А потом удалить одну из них, а потом добавить ещё пять точно таких же.
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Тебе захотелось вызывать одну функцию несколько раз на один колбек : )
Зачем мне это захотелось?
источник

S

Snusmumriken in pro.lua
А я откуда знаю, юзеру может и не такое в голову придти : )
Но тут уже появляется неопределённое поведение.

А ещё, при добавлении — надо проверять все функции в списке колбеков: нет ли ещё такого колбека, и если есть — удалять старый и добавлять новый в конец (типа, заставляем его вызываться последним).
В противном случае, ты такой добавил две одинаковые функции, удалил одну — а удалилась только первая попавшаяся. А почему не последняя? А почему не все сразу? Опять странное поведение.
источник

S

Snusmumriken in pro.lua
И как оно должно влиять на порядок выполнения?
источник

S

Snusmumriken in pro.lua
В общем, айдишки в жаваскрипте введены далеко не просто так, это гарантия однозначности.
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
А я откуда знаю, юзеру может и не такое в голову придти : )
Но тут уже появляется неопределённое поведение.

А ещё, при добавлении — надо проверять все функции в списке колбеков: нет ли ещё такого колбека, и если есть — удалять старый и добавлять новый в конец (типа, заставляем его вызываться последним).
В противном случае, ты такой добавил две одинаковые функции, удалил одну — а удалилась только первая попавшаяся. А почему не последняя? А почему не все сразу? Опять странное поведение.
Оно по идее все одинаковые коллбеки портрет просто и все.
источник

S

Snusmumriken in pro.lua
Это очень странная логика.
источник

S

Snusmumriken in pro.lua
И совсем неочевидная.
источник

S

Snusmumriken in pro.lua
То есть, кто бы мог подумать.. Нарушение принципа KISS, вот ты с ним и столкнулся : )
источник

AZ

Aydar Zarifullin in pro.lua
Ну окей, убедил. Позднее ещё напишу...
источник

S

Snusmumriken in pro.lua
KISS — это когда не возникает вопросов "почему оно сдела[л/н]о именно так".
То есть, для того чтобы реализовать штуку которую ты предлагаешь, мне нужно:
1. Нагромоздить кучу списков для каждого варианта колбека;
2. Написать кучу проверок наличия функций в списках, добавления/удаления, изменения порядка;
3. Задокументировать эту фигню, заставить пользователя вызубрить как оно работает, и то, он будет регулярно сталкиваться со странным поведением из-за собственных мелких оплошностей (либа перетёрла нафиг всё старое и порядок поменяла, а он был важен).

И всё для того, чтобы сделать код медленнее, а свою жизнь и жизнь юзера — сложнее, когда пользователь может сам сделать как ему нужно, хоть так, хоть иначе.

Вопрос: зачем?
Тем более, что люди не любят когда их держат за идиотов, а подобная схема им явно это намекает. Даже ЖСная схема, благодаря айдишкам, более конкретна и однозначна.
источник

S

Snusmumriken in pro.lua
Поэтому, мой очень страшный совет: если делаешь библиотеки или апи — делай их как можно проще одновременно для написания и использования. Это сложная задача, нужно думать головой, но чем меньше автоматизации за бортом — тем лучше и меньше шанс факапов: функции должны делать ровно то что написано на упаковке, но не более. А то в пользовательском коде вроде бы всё в порядке — а всё ломается, и надо лезть в исходный код/доку оригинальной библиотеки и крайне внимательно полностью читать её, потому что по ключевым словам ты такое не найдёшь: юзер забьёт на эту либу, и через десять лет случайно прочитает: "ан вот оно что!", но поезд уже ушёл ))
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
И итерировать придётся pairs'ом.

А теперь сделай то же самое на сишной стороне : )
Зачем делать что-то на сишной стороне если можно просто луевые функции дергать? По поводу индексов можно действительно просто игнорить nilы. То что итерироваться придется pairsом на самом деле не проблема.
источник

S

Snusmumriken in pro.lua
Зачем делать что-то на сишной стороне, когда это можно не делать, оставив луёвой луёвое? : )
В моём случае, сами колбеки обязательно вызываются сишной, тут я мало что сделать могу.
источник

S

Snusmumriken in pro.lua
Но если делать дырки — это ещё придётся вставлять на место дырки, искать место вставки. Оно может быть не тем которое #tbl + 1. Но с этим вполне справится юзер.

Просто не надо делать ничего лишнего. У юзера есть целая одна функция для данного колбека, пущай делает с ней что хочет, хоть завод на ней городит : )
источник

AR

Alxius R in pro.lua
Snusmumriken
Кстати, через int ref = lua_ref(L, -1); можно запоминать ссылки на функции, например. То есть, у тебя в сишном модуле функция "setJsonDecoder", которая принимает из луа функцию, запоминает, а потом вызывает при нужде. Но тут всё равно проблемы обработки тех же ошибок типа "невалидный json".

То есть, тут могут быть ссылки на любые ссылочные типы (коих примерно четыре).
А что дало написание Стим библиотеки ? Функцию позвать друга и ачивки или что то ещё?
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Но если делать дырки — это ещё придётся вставлять на место дырки, искать место вставки. Оно может быть не тем которое #tbl + 1. Но с этим вполне справится юзер.

Просто не надо делать ничего лишнего. У юзера есть целая одна функция для данного колбека, пущай делает с ней что хочет, хоть завод на ней городит : )
Может оно и так, тоже маюсь с коллбэками. В кваке хочу на почти каждую сишную функции сделать луашный коллбэк чтобы можно было хоть какое-то поведение скриптовать на луях.
источник