Mudlet: Compléter les fonctions indexées 0 avec indexées 1

Créé le 16 avr. 2020  ·  8Commentaires  ·  Source: Mudlet/Mudlet

Bref résumé du problème / Description de la fonctionnalité demandée :

Nous avons quelques fonctions dans TLuaInterpreter.cpp d'une première conception qui indexent à partir de 0 - ce qui n'est pas idiomatique Lua et peu intuitif . Besoin d'y ajouter des compléments indexés 1, comme https://wiki.mudlet.org/w/Manual :Mapper_Functions#getExitStubs1.

Étapes pour reproduire le problème / Raisons de l'ajout de la fonctionnalité :

API plus intuitive.

Sortie d'erreur / Résultat attendu de la fonctionnalité

Toute fonction qui renvoie une table indexée commençant à 0 doit également avoir une fonction complémentaire qui commence l'indexation à 1.

Informations supplémentaires, telles que la version Mudlet, le système d'exploitation et des idées sur la façon de résoudre/implémenter :

4.6.2

enhancement help wanted

Commentaire le plus utile

Eh bien, que diriez-vous d'annoncer que nous aurons finalement un getLuaApiVersion() qui renverra une chaîne de numéro de version de la forme 1.xy , et promettons que lorsque nous 2, toutes les fonctions cassées/défuntes seront corrigé/supprimé et tout le reste aura une gestion des arguments et des valeurs de retour complètement uniformes (y compris nil + messages d'erreur pour chaque problème d'exécution).

Bien sûr, cela fournira alors une opportunité de briser la compatibilité descendante, nous devons donc l'intégrer dans l'API Lua dès que possible afin que les packages et les scripts puissent commencer à se défendre contre un tel changement radical.

Nous pourrions même envisager de le faire simultanément avec une modification de (float) mudlet::mMudletXmlDefaultFormat à une valeur >= 2.0 - ce qui serait approprié car tout fichier de sauvegarde XML ou package portant un tel numéro sera complètement rejeté (par conception) par tout Mudlet depuis la version 3.0.1 et affichera ce qui suit :

[ ALERT ] - Sorry, the file being read:
            XXXXX.xml
            reports it has a version (2.0.0) it must have come from a later Mudlet version,
            and this one cannot read it, you need a newer Mudlet!

Inutile de dire qu'un tel changement sera massif et devrait également être compatible avec une version majeure de Mudlet, mais je ne m'attendrais pas à ce que ce soit avant Mudlet 6.0 au plus tôt . OTOH Il serait alors possible de passer à une version ultérieure de Lua.

Tous les 8 commentaires

Que diriez-vous d'ajouter à la fois getExitStubs1 et getExitStubs0 afin que nous puissions donner un avertissement juste et faire fonctionner getExitStubs comme prévu à un moment donné ? De cette façon, Mudlet pourrait devenir plus idiomatique et intuitif à la fin.

Je comprends ce que vous dites, mais cela briserait les scripts existants pour ce qui est relativement un problème trivial, pas un bon compromis. C'est bien que quelqu'un puisse récupérer du code sur un forum d'il y a quelques années, le déposer et le faire fonctionner.

Si seulement nous pouvions influencer magiquement tout le code qui a été mis là-bas... :)

Je me souviens de quelque chose comme la commande fix de rust-lang... (ou was golang fix) où elle réparait les choses comme par magie.

--the following possible functions have 0-indexed
function getRoomsByPosition()
function getExitStubs() --Obviously..
function getAreaRooms()

Éditer:
Il semblerait que ce ne soient que les fonctions qui doivent être modifiées pour renvoyer une réponse indexée 1 appropriée.

Eh bien, que diriez-vous d'annoncer que nous aurons finalement un getLuaApiVersion() qui renverra une chaîne de numéro de version de la forme 1.xy , et promettons que lorsque nous 2, toutes les fonctions cassées/défuntes seront corrigé/supprimé et tout le reste aura une gestion des arguments et des valeurs de retour complètement uniformes (y compris nil + messages d'erreur pour chaque problème d'exécution).

Bien sûr, cela fournira alors une opportunité de briser la compatibilité descendante, nous devons donc l'intégrer dans l'API Lua dès que possible afin que les packages et les scripts puissent commencer à se défendre contre un tel changement radical.

Nous pourrions même envisager de le faire simultanément avec une modification de (float) mudlet::mMudletXmlDefaultFormat à une valeur >= 2.0 - ce qui serait approprié car tout fichier de sauvegarde XML ou package portant un tel numéro sera complètement rejeté (par conception) par tout Mudlet depuis la version 3.0.1 et affichera ce qui suit :

[ ALERT ] - Sorry, the file being read:
            XXXXX.xml
            reports it has a version (2.0.0) it must have come from a later Mudlet version,
            and this one cannot read it, you need a newer Mudlet!

Inutile de dire qu'un tel changement sera massif et devrait également être compatible avec une version majeure de Mudlet, mais je ne m'attendrais pas à ce que ce soit avant Mudlet 6.0 au plus tôt . OTOH Il serait alors possible de passer à une version ultérieure de Lua.

Est-il possible de le résoudre en faisant de table[0] et table[#table] la même référence ? Donc, le code qui utilisait table[0] et ipairs fonctionne sans problème ?
Je ne pense pas que ce soit le correctif car cela provoque un événement en double pour le code qui utilise for i=0, #table do
Cela semble être un problème qui a une solution de contournement intelligente.

Pourrait-il y avoir une méthode utilisant metatable _index ? Je ne comprends pas complètement les métatables.

Cette page vous a été utile?
0 / 5 - 0 notes