Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   default параметры в конструкторе (http://www.flasher.ru/forum/showthread.php?t=126233)

kup 14.06.2009 20:54

default параметры в конструкторе
 
Хочется странного... чтобы при создании, по new MySuperSprite(), спрайт получал некие, заранее извесные координаты. А по new MySuperSprite(new Point(x, y)) соответсвенно позиционировался куда скажут.

Код AS3:

package
{
        import flash.geom.Point;
        import flash.display.Sprite;
 
        class MySuperSprite extends Sprite
        {
                function MySuperSprite(position:Point = new Point())
                {
                        super();
 
                        this.x = position.x;
                        this.y = position.y;
                }
        }
}

Можно конечно все по другому сделать. Но искал в хелпе - не нашел явного запрета.

BlooDHounD 14.06.2009 21:17

Код AS3:

package {
        import flash.geom.Point;
        import flash.display.Sprite;
 
        class MySuperSprite extends Sprite {
 
                public function MySuperSprite(position:Point=null) {
                        super();
                        if ( !position ) position = new Point();
                        this.x = position.x;
                        this.y = position.y;
                }
        }
}


Яски 14.06.2009 21:21

Цитата:

Новой возможностью ActionScript 3.0 является способность объявлять для функции значения параметров по умолчанию. Если вызывается функция со значениями параметров по умолчанию, используются значения, указанные для параметров в определении функции. Все параметры со значениями по умолчанию должны быть помещены в конец списка параметров. Значения, которые присвоены в качестве значений по умолчанию должны быть константами, определяемыми во время компиляции. Существование для параметра значения по умолчанию фактически делает этот параметр необязательным параметром. Параметр без значения по умолчанию считается обязательным параметром.
http://help.adobe.com/ru_RU/ActionSc...0204-7f56.html
Но можно написать так:
Код AS3:

function Constructor(point:Point = null) {
  this.x = (point == null) ? 0 : point.x;
  this.y = (point == null) ? 0 : point.y;
}


kup 14.06.2009 21:46

Спасибо, но все же очень спорный запрет. Например,

Код AS3:

public static const pnt:Point = new Point(10, 20);

вполне может быть константой. Обидно что,

Код AS3:

function Constructor(pointX:Number = 0, pointY:Number = 0)

работает и как бы подталкивает плодить сущности...

dimarik 15.06.2009 01:36

Код AS3:

function Constructor( position:Point = new Point(10, 20) ) {
    // whatever else;
}


BlooDHounD 15.06.2009 12:11

dimarik, и этот код работает? :)

CrazyFlasher 15.06.2009 12:12

сомневаюсь :)

dimarik 15.06.2009 12:34

Не, не работает. Point на этапе компиляции не может быть определен. Только простые типы данных могут быть определены на этом этапе. Только их и можно использовать в качестве подобных аргументов.

kup 16.06.2009 04:06

Вот и я с разбегу на эти грабли наступил. :) В других языках, есть костыль в виде forward declaration. Пишем class Point; и компилятор считает, что все путем.


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

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