Отсутствие перегрузки оператора в ActionScript 3.0
Одна из вещей, которые я пропускаю больше всего в ActionScript, - это отсутствие перегрузки оператора, в частности ==. Я как-то обойду эту проблему, добавив метод "Сравнить" к моим классам, но это не помогает во многих случаях, например, когда вы хотите использовать такие вещи, как встроенный словарь.
Есть ли хороший способ обойти эту проблему?
Ответы
Ответ 1
Неа.
Но не помешает добавлять методы equals
к вашим собственным классам. Я стараюсь никогда не использовать ==
при сравнении объектов (то же самое относится и к ===
, что является одним и тем же для объектов), поскольку он только проверяет идентификатор.
К сожалению, все коллекции в Flash и Flex предполагают, что идентификация является единственной мерой необходимого равенства.
В Flex есть подсказки, которые кто-то хотел решить эту проблему за один раз, но похоже, что она была оставлена: есть интерфейс под названием IUID, и он упоминается в Руководстве разработчика Flex, но он нигде не используется. Даже коллекции в Flex не используют его для определения равенства. И поскольку вы запрашиваете решение для Flash, возможно, оно вам ничего не помогло.
Я написал еще об этом (в контексте Flex) в своем блоге: Нет ли равенства?.
Ответ 2
Да, это можно сделать (но будьте осторожны, его хаки): http://filimanjaro.com/2012/operators-overloading-in-as3-javascript-too-%E2%80%93-workaround/
В учебнике, который я написал о + =, - = перегрузке оператора. Но это также возможно с ==, я могу написать больше об этом, если это не понятно.
А, подход имеет некоторый недостаток (в редких случаях это может быть даже опасно). Подумайте дважды, прежде чем использовать его в производстве.
EDIT:
После тестов кажется, что трюк с + =, - = не применяется к оператору == (что имеет смысл). Извините за вводящую в заблуждение информацию.