Привет сумасшедшие массивы!
Что же случилось? А все просто, в справке написано: 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];
Час искал какого-ж хрена не работает, расстроен.
Если действовать по аналогии, как описана в посте, то попасться на такую ошибку просто. Но ведь ничего «сумасшедшего» в этой конструкции нет.
Класс может иметь несколько конструкторов, нужно просто помнить об этом. Компилятор же будет выбирать наиболее «подходящий» конструктор.
Да и в самом хелпе написано:
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.
@Bright
Согласен, но конструктор вызывался следующим образом new Array (ActionItem.SELL_ITEM), поэтому баг и ловился долго:)
@Snut
Ага, такие баги ооочень долго ловятся =) И написано вроде все правильно, а работает все равно не так %)
@Bright
Вот именно:)