Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.01.2014, 14:21
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 11  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
То есть по факту, классы наследники мне пришлось оставить пустыми, потому как больше ничего поделать я с ними не могу.
Может они хотят что-то типа такого (хотя не факт):

Код AS3:
public class Enumeration
    {
        public function Enumeration()
        {
 
        }
 
        private var _commonValue:*;
        public function get commonValue():*// Это для обобщенных алгоритмов над всеми перечислениями
        {
            return _commonValue;
        }
 
    }
 
 public class UintEnumeration extends Enumeration
    {
 
        public function UintEnumeration()
        {
 
        }
 
        private var _value:uint;
        public function set value(value:uint):uint
        {
             _value = value;
             _commonValue = value;
        }
        public function get value():uint
        {
             return _value;
        }
    }
Цитата:
могу ли я в классах наследниках переписать так метод get value() чтобы он возвращал значения другого типа? Так как в данной ситуации, это могла быть единственная польза принесенная таким наследованием.
Пользу тут вообще искать сложно, они это, видимо, чисто ради примера сделали
На практике такой стиль не подводил(без всяких базовых классов - они практически бесполезны и с забиванием большого гвоздя на проверки создания не в том месте - они не от чего не защищают):
Код AS3:
public class UnitType
{
    // Список всех значений (не всегда нужен, кстати)
    public static const allUnits:Vector.<Unit> = new Vector.<Unit>();
 
    public static const Unit1:UnitType = new UnitType(1);
    public static const Unit1:UnitType = new UnitType(2);
    public static const Unit1:UnitType = new UnitType(3);
 
    private var _code:uint;
    public function get code():uint
    {
        return _code;
    }
 
    public function UnitType(code:uint)
    {
        _code = code;
        allUnits.Add(this);// заполнение списка
    }
}
А громоздить сюда рефлексию - это лишние проблемы при дебаге и никакой пользы

Старый 29.01.2014, 14:47
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 12  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Вчера не спрашивал, потому что думал, пойму. Но нет, я и статью прочёл и код смотрел сто раз.
Объясните на простом языке, для чего это.

Старый 29.01.2014, 15:13
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 13  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
если честно, не совсем понял в чем проблема
вот такой вариант, например
Код AS3:
package
{
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
 
		public function Main():void
		{
 
			var list:Vector.<Enumeration> = Enumeration.getElementsList(UnitType);
			trace("list : " + list);
			var element:Enumeration = Enumeration.getElementByValue(1, UnitType);
			trace("element : " + element);
			var isHero:Boolean = (element === UnitType.HERO);
			trace("isHero : " + isHero);
		}
 
	}
 
}
 
//=================================//
import flash.utils.describeType;
 
class Enumeration
{
	public var value:*;
 
	public function Enumeration(value:*)
	{
		this.value = value;
	}
 
	public static function getElementsList(enumClass:Class):Vector.<Enumeration>
	{
		var list:Vector.<Enumeration> = new Vector.<Enumeration>();
		var constList:XMLList = describeType(enumClass).constant;
 
		for each (var item:XML in constList)
		{
			list.push(enumClass[item.@name])
		}
 
		return list;
 
	}
 
	public static function getElementByValue(value:*, enumClass:Class):Enumeration
	{
		var constList:XMLList = describeType(enumClass).constant;
 
		for each (var item:XML in constList)
		{
			if (enumClass[item.@name].value == value)
				return enumClass[item.@name];
		}
 
		return null;
	}
}
 
//=================================//
class UintEnumeration extends Enumeration
{
 
	public function UintEnumeration(value:uint)
	{
		super(value);
 
	}
 
}
 
//=================================//
class UnitType extends UintEnumeration
{
 
	public static const HERO:UnitType = new UnitType(1);
	public static const WARRIOR:UnitType = new UnitType(2);
 
	public function UnitType(value:uint)
	{
		super(value);
 
	}
 
}

Старый 29.01.2014, 15:56
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 14  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
expl, Я вот вобщем-то тоже придерживаюсь идеи о том, что адекватнее всего иметь список констант уже заранее сформированный. при том может быть, если уж имеем дело со списком то и хранить их например в хэше и запрашивать по ключу, нежели изголяться через describeType.

Akopalipsis, Для чего что именно? Реализация перечислений? Об этом я писал несколько выше:
Цитата:
делаем код более читаемым, избавляясь от магических чисел, плюс ко всему мы имеем возможность иметь дело с этими значениями как с типом, что позволяет внести дополнительную конкретизацию при, например, описании методов.
Если вопрос в том зачем такая реализация, то тут уже я сильно затрудняюсь вам как-то это прокомментировать. Люди составлявшие задание по всей видимости пытались сделать сделать из него загадку, мол «вот вам странные условия задачи, попробуйте используя их дать нам ответ, какой мы хотим увидеть. Попытайтесь использовать нашу логику». Признаться честно глядя на все это мне кажется что такой способ можно охарактеризовать только одним словом - ИЗВРАТ.

silin, Если честно, мне кажется, что проблема на деле в странно поставленной задаче. Сам запутался и вас запутал. В общем на деле пожалуй ваш вариант наиболее приближен к тому, что как я понял от меня хотели. Сформирую свой вариант и, если будет какой-то ответ по заданию, расскажу, что же там была за черная магия в описании.

Вобщем всем спасибо, вы мне очень помогли )

Старый 15.02.2014, 15:51
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 15  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Хочется полюбопытствовать, в конструкторах классов присутствует параметр id, так вот он для того, чтобы в каком-нибудь особом случаи сравнивать по нему? Типа -
Код AS3:
...
public static const HERO:UnitType = new UnitType(1);
...
public static const HERO:uint = 0x000000;
...
if(HERO.id == HERO){...}
Правильно я понял?

Старый 15.02.2014, 16:42
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 16  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>Правильно я понял?
все правильно, в особых случаях параметр id можно использовать для сравнения в операторе if

Старый 16.02.2014, 07:25
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 17  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Немного не по теме - а при помощи describeType можно только public свойства увидеть?
Почему-то мне кажется, что можно и к остальным обращаться-считать, но у меня не получается и мне уже кажется, что я что-то напутал.

Старый 16.02.2014, 12:03
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 18  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
да, при помощи describeType можно только public свойства увидеть

Старый 16.02.2014, 13:58
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 19  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
silin Спасибо! Ужас.

Старый 20.09.2016, 01:54
taluks вне форума Посмотреть профиль Отправить личное сообщение для taluks Найти все сообщения от taluks
  № 20  
Ответить с цитированием
taluks

Регистрация: Jan 2013
Сообщений: 38
если кому еще интересно то выглядеть должно так так

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
AS3 , enum , static
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:00.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.