Что это значит в AS3? - PullRequest
       12

Что это значит в AS3?

1 голос
/ 04 июня 2010

Здравствуйте, я начал изучать AS3 из одной книги и нашел что-то, чего не понимаю.

Ellipse(_board[row][column]).fill = getFill(row, column);
  • _board - это двумерный массив типа Ellipse, поэтому я просто не понимаю, почему Ellipse(Ellipse object) используется, когда он, очевидно, работает без него, или я не видел никаких изменений, когда его опускал.

Ответы [ 2 ]

3 голосов
/ 04 июня 2010

Ellipse(_board[row][column]) является типом типа Type(object) Поскольку вы можете помещать что угодно в Array, компилятор не знает, какие объекты хранятся в Array. Так что это хороший стиль для приведения объектов, если вы извлекаете их из Array к их правильному типу.

Это имеет несколько преимуществ:

  • если такой объект не соответствует ожидаемому или нулевому типу, вы будете знать, когда будете вводить тип вместо того, чтобы позже получить ошибку где-то далеко
  • код выполняется немного быстрее, если вы явно указали типы
  • если вы используете хорошую IDE, она может предоставить вам автозаполнение, когда знает типы
0 голосов
/ 04 июня 2010

_board - это многомерный массив, вначале заполненный массивами. В BoardDisplay.mxml

(Hello! Flex 4: Глава 3. Hello Spark: примитивы, комп ...> Графика FXG и MXML - создание игры .. - Стр. 80) ,

<Graphic version="1.0" viewHeight="601" viewWidth="701"
  xmlns=" library://ns. adobe. com/flex/spark"
  xmlns:fx=" http://ns. adobe. com/mxml/2009"
  xmlns:mx=" library://ns. adobe. com/flex/halo"
  initialize="createBoard()"
  click=" clickHandler(event)">

инициализировать вызовы createBoard ().

private function createBoard():void {
    newGame();
    _board = new Array(6);
    for (var row:int = 0; row < 6; row++) {
        _board[row] = new Array(7);
        for (var col:int = 0; col < 7; col++) {
            _board[row][col] = addEllipse(row, col); //Magic Happens!
        }
    }
}

addEllipse возвращает Ellipse для каждой записи в _board

private function addEllipse(row:int, col:int):Ellipse {
    var ellipse:Ellipse = new Ellipse();
    ellipse.x = 4 + col*100;
    ellipse.y = 5 + row*100;
    ellipse.width = 90;
    ellipse.height = 90;
    ellipse.fill = getFill(row,col); // Magic Found !
    ellipse.stroke = new SolidColorStroke(0x000000, 1, 1.0, false,"normal", null, "miter", 4);
    boardGroup.addElement(ellipse);
    return ellipse;
}

Автор произнес это, как сказал maxmx, но в действительности это не нужно, поскольку все записи были типа Ellipse, поэтому

Ellipse(_board[row][column]).fill = getFill(row, column);

может работать как

_board[row][column].fill = getFill(row, column);
...