Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка при передаче параметра в функцию (http://www.flasher.ru/forum/showthread.php?t=115146)

Волгоградец 20.08.2008 16:13

Ошибка при передаче параметра в функцию
 
Привет еще раз. Помогите понять вот что:
Код:

       
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;
}

Почему эта ошибка?

etc 20.08.2008 16:39

Вы думаете, что интерпретатор сам прокастит target в Sprite?
Код:

test(e.target as Sprite);

Волгоградец 20.08.2008 16:58

Я думал, что интерпретатору знает, что target является спрайтом. Ведь
Код:

trace (e.target)
правильно же выдает - [object Sprite].

etc 20.08.2008 17:04

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

Волгоградец 20.08.2008 17:25

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

etc 20.08.2008 17:30

Трейс делает интерпретатор, а не компилятор. Ошибка у вас ещё на стадии компиляции, потому что компилятор проверяет все типы и не даст скомпилировать некоррентный код.

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

Яски 20.08.2008 17:41

И вообще то Object является базовым классом для всех классов в АС3.

Волгоградец 20.08.2008 17:52

Все, догнал. Спасибо за помощь! Пойду документацию зубрить.

enepx 20.08.2008 20:00

Волгоградец, я всегда пишу так
Код:

(e.target as Sprite).addEventListener...
Может быть и не только Sprite же


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

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