Absence de surcharge d'opérateurs dans ActionScript 3.0
-
09-06-2019 - |
Question
L'une des choses qui me manque le plus dans ActionScript est l'absence de surcharge des opérateurs, en particulier ==.Je contourne en quelque sorte ce problème en ajoutant une méthode "Comparer" à mes cours, mais cela n'aide pas dans de nombreux cas, par exemple lorsque vous souhaitez utiliser des éléments tels que le dictionnaire intégré.
Existe-t-il un bon moyen de contourner ce problème ?
La solution
Non.
Mais ça ne fait pas de mal d'ajouter equals
méthodes à vos propres classes.J'essaie de ne jamais utiliser ==
lors de la comparaison d'objets (il en va de même pour ===
, ce qui est la même chose pour les objets) puisqu'il vérifie uniquement identité .
Malheureusement, toutes les collections Flash et Flex supposent que l'identité est la seule mesure d'égalité nécessaire.
Il y a des indices dans Flex selon lesquels quelqu'un voulait atténuer ce problème à un moment donné, mais il semble que cela ait été abandonné :il y a une interface appelée IUID, et il est mentionné dans le Guide du développeur Flex , mais il n’est utilisé nulle part.Même les collections de Flex ne l'utilisent pas pour déterminer l'égalité.Et puisque vous demandez une solution pour Flash, cela ne vous a peut-être pas aidé de toute façon.
J'en ai écrit davantage à ce sujet (dans le contexte de Flex) sur mon blog : N'y a-t-il pas d'égalité ?.
Autres conseils
Oui, cela peut être fait (mais attention, c'est hacky) : http://filimanjaro.com/2012/operators-overloading-in-as3-javascript-too-%E2%80%93-workaround/
Dans le tutoriel, j'ai écrit sur la surcharge des opérateurs +=, -=.Mais c'est aussi possible avec ==, je peux en écrire plus si ce n'est pas clair.
Ah, cette approche présente certains inconvénients (dans de rares cas, elle peut même être dangereuse).Réfléchissez à deux fois avant de l'utiliser dans une production.
MODIFIER:
Après les tests, il semble que l'astuce avec +=, -= ne s'applique pas à l'opérateur == (ce qui a du sens).Désolé pour les informations trompeuses.