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

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

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
По умолчанию Ошибка при передаче параметра в функцию

Привет еще раз. Помогите понять вот что:
Код:
	
private function init(e:Event):void{
	e.target.addEventListener(MouseEvent.MOUSE_DOWN, startTest);
}
		
private function startTest(e:MouseEvent):void{
	trace (e.target is Sprite);//true
	test(e.target);//ошибка: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:Sprite.
	test2(e.target);//работает
}
		
private function test(mc:Sprite):void{
	mc.x += 50;
}
private function test2(mc:Object):void{
	mc.x += 50;
}
Почему эта ошибка?

Старый 20.08.2008, 16:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Вы думаете, что интерпретатор сам прокастит target в Sprite?
Код:
test(e.target as Sprite);

Старый 20.08.2008, 16:58
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 3  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Я думал, что интерпретатору знает, что target является спрайтом. Ведь
Код:
trace (e.target)
правильно же выдает - [object Sprite].

Старый 20.08.2008, 17:04
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Вы пытаетесь передать в функцию абстракный объект, вместо Sprite. То, что ссылка указывает на Sprite, компилятор ещё не знает.

Старый 20.08.2008, 17:25
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 5  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Ок. Спасибо, __etc. Запомню это, хотя не понятно все равно - если компилятор не знает, то кто же трэйсит тогда [object Sprite]?? И если передавать просто объект Object, то почему работает - ведь компилятор же не знает, что я передаю DisplayObject, почему пропускает тогда без ошибки? И что такое абстрактный объект? И откуда вы все это знаете?

Старый 20.08.2008, 17:30
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Трейс делает интерпретатор, а не компилятор. Ошибка у вас ещё на стадии компиляции, потому что компилятор проверяет все типы и не даст скомпилировать некоррентный код.

Из документации я все это знаю и из простейшего понятия типизации, а также того, что Object — dynamic.

Старый 20.08.2008, 17:41
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 7  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
И вообще то Object является базовым классом для всех классов в АС3.

Старый 20.08.2008, 17:52
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 8  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Все, догнал. Спасибо за помощь! Пойду документацию зубрить.

Старый 20.08.2008, 20:00
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 9  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Волгоградец, я всегда пишу так
Код:
(e.target as Sprite).addEventListener...
Может быть и не только Sprite же

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

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

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


 


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


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