Отсутствие перегрузки операторов в ActionScript 3.0 - PullRequest
15 голосов
/ 09 сентября 2008

Одна из вещей, которые мне больше всего не хватает в ActionScript - это отсутствие перегрузки операторов, в частности ==. Я вроде обхожу эту проблему, добавляя метод «Сравнение» в мои классы, но это не помогает во многих случаях, например, когда вы хотите использовать такие вещи, как встроенный словарь.

Есть ли хороший способ обойти эту проблему?

Ответы [ 2 ]

12 голосов
/ 09 сентября 2008

Нет.

Но не мешает добавлять equals методы в ваши собственные классы. Я стараюсь никогда не использовать == при сравнении объектов (то же самое относится и к ===, что то же самое для объектов), поскольку он проверяет только идентичность .

К сожалению, все коллекции в Flash и Flex предполагают, что идентичность является единственной мерой равенства, которая необходима.

В Flex есть намеки на то, что кто-то хотел однажды решить эту проблему, но кажется, что она была заброшена: есть интерфейс под названием IUID , и он упоминается в Flex Руководство разработчика , но оно нигде не используется. Даже коллекции в Flex не используют его для определения равенства. И поскольку вы запрашиваете решение для Flash, оно, возможно, не помогло вам в любом случае.

Я написал об этом (в контексте Flex) еще в своем блоге: Нет ли равенства? .

4 голосов
/ 24 января 2012

Да, это может быть сделано (но будьте осторожны, это глупо): http://filimanjaro.com/2012/operators-overloading-in-as3-javascript-too-%E2%80%93-workaround/

В уроке я писал о перегрузке операторов + =, - =. Но это также возможно с ==, я могу написать больше об этом, если это не ясно.

Ах, у подхода есть некоторый недостаток (в редких случаях он может быть даже опасным). Подумайте дважды, прежде чем использовать его в производстве.

EDIT:

После тестов кажется, что трюк с + =, - = не применим к оператору == (что имеет смысл). Извините за вводящую в заблуждение информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...