Главная > Новости > Привет сумасшедшие массивы!

Привет сумасшедшие массивы!

Что же случилось? А все просто, в справке написано: var oneArray:Array = new Array(«a», «b», «c»); типо вот у нас массив, с тремя элементами, ну клево, возрадуемся мощности технологий, а вот мне надо создать массив не с элементами «a», «b», «c», а с элементами 1, 2, 3, пожалуйста: var oneArray:Array = new Array(1, 2, 2); легко, вот вам массив с тремя элементами.

Теперь совсем «не тривиальная задача», нужен массив с одним элементом равный 1, чтобы oneArray[0] = 1, ну чтож, делаем по предыдущей схеме var oneArray:Array = new Array(1); ожидая, что oneArray[0] = 1, aн нет, oneArray[0] = undefined, чтобы вы думали? Конструкция new Array(1) создает массив единичной длинны, и неопределенным 0 элементом. Выход: var oneArray:Array =  [1];

Час искал какого-ж хрена не работает, расстроен.

  1. 28 Январь 2010 в 20:57 | #1

    Если действовать по аналогии, как описана в посте, то попасться на такую ошибку просто. Но ведь ничего «сумасшедшего» в этой конструкции нет.

    Класс может иметь несколько конструкторов, нужно просто помнить об этом. Компилятор же будет выбирать наиболее «подходящий» конструктор.

    Да и в самом хелпе написано:

    Array(numElements:int = 0)
    Lets you create an array of the specified number of elements.

    Array(… values)
    Lets you create an array that contains the specified elements.

  2. 28 Январь 2010 в 21:24 | #2

    @Bright
    Согласен, но конструктор вызывался следующим образом new Array (ActionItem.SELL_ITEM), поэтому баг и ловился долго:)

  3. 28 Январь 2010 в 22:28 | #3

    @Snut
    Ага, такие баги ооочень долго ловятся =) И написано вроде все правильно, а работает все равно не так %)

  4. 28 Январь 2010 в 22:31 | #4

    @Bright
    Вот именно:)

  1. Пока что нет уведомлений.