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

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

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

Регистрация: Jun 2010
Сообщений: 97
По умолчанию Array is Object

Доброго времени суток.

Вопрос заключается в следующем: можно ли как то узнать, что полученный на вход функции объект именно Object, а не Array?

Код AS3:
function funcName (input:*):void
{
if (input is Array) {
//Превращаем input массив
} else if (input is Object) {
//Превращаем input в словарь
} else {
throw new Error();
}
}
Так как Array наследуется от Object, то поданный на вход метода Object проходит условие if (input is Array), что приводит к ошибке.
Как понять что полученный объект именно Array, а не Object?

Старый 24.01.2012, 14:29
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Все что есть в AS3.0 является Object.
проверяйте
Код AS3:
typeof(input) === "array"
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>поданный на вход метода Object проходит условие if (input is Array)
это не может быть, описка видимо
Код AS3:
trace( "Object is Array : " + (new Object() is Array));// false
а вообще можно так с типами разобраться
Код AS3:
private function funcName(input:*):void
{
	var inputType:Class = Object(input).constructor;
	//trace( "inputType : " + inputType );
	switch(inputType)
	{
		case Array:
			trace( "Array");
			return;
		case Object:
			trace( "Object");
			return;
		default:
			trace( "Error");
 
	}
}

Старый 24.01.2012, 14:32
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
if (input is Array)
Должно работать. Правда не знаю, если инпут=нулл. Автор ведь не сказал, к какой ошибке приводит.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 24.01.2012, 14:58
Jitakuzu вне форума Посмотреть профиль Отправить личное сообщение для Jitakuzu Найти все сообщения от Jitakuzu
  № 5  
Ответить с цитированием
Jitakuzu

Регистрация: Jun 2010
Сообщений: 97
Ну да, я опечатался. Поданный на вход Array проходит условие if (input is Object), что приводит к ошибке.
Спасибо за подсказки, попробую как написали.

Добавлено через 9 минут
Посмотрел документацию по typeOf. Проблем в том, что typeOf для Array возвращает object.

Старый 24.01.2012, 15:23
Jewelz вне форума Посмотреть профиль Отправить личное сообщение для Jewelz Найти все сообщения от Jewelz
  № 6  
Ответить с цитированием
Jewelz
 
Аватар для Jewelz

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
а чем не устроил вариант silin'a ?
__________________
low +

Старый 24.01.2012, 15:37
Jitakuzu вне форума Посмотреть профиль Отправить личное сообщение для Jitakuzu Найти все сообщения от Jitakuzu
  № 7  
Ответить с цитированием
Jitakuzu

Регистрация: Jun 2010
Сообщений: 97
все получилось, как silin написал. я сначала, просто. не через switch, а через if (inputType is Array), что приводило к старой ошибке. Заменил is на == и все получилось. Спасибо.

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

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

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


 


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


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