Отсутствие перегрузки операторов в ActionScript 3.0.

StackOverflow https://stackoverflow.com/questions/51007

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Неа.

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

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

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

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

Другие советы

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

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

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

РЕДАКТИРОВАТЬ:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top