Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   FlashMX не поддерживает четырехмерные массивы? (http://www.flasher.ru/forum/showthread.php?t=83133)

iNils 28.07.2006 15:40

Цитата:

Сообщение от motor4ik
я что то не понял в чем прикол функции arrayN?

А такая вещь не смущает?
Код:

a = [];
a[5] = 6;
trace (a);
//undefined,undefined,undefined,undefined,undefined,6


xintrea 28.07.2006 15:47

Цитата:

Сообщение от iNils
Код:

arrayN = function (arrayName, arrayD, arg) {
        if (!this[arrayName]) {
                this[arrayName] = [];
        }
        var arrayTemp = this[arrayName];
        var len = arrayD.length - 1;
        for (var i = 0; i < len; i++) {
                if (!arrayTemp[arrayD[i]]) {
                        arrayTemp[arrayD[i]] = [null];
                }
                arrayTemp = arrayTemp[arrayD[i]];
        }
        arrayTemp[arrayD[len]] = arg;
};
arrayN ('c', [1, 1], 50);
arrayN ('a', [5, 2, 3, 6], 100);
arrayN ('a', [5, 2, 3, 7], 200);
trace (c[1][1]);
trace (a[5][2][3][6]);
trace (a[5][2][3][7]);


А вот еще вопрос. Не могу сообразить, как изменить вашу функцию так, чтобы она создавала элементы глобальных массивов...

Вызов в стиле arrayN ('_global.c', [1, 1], 50); при проверке содержимого как trace (c[1][1]); дает undefined.

А при при попытке сделать так

Код:

_global.c=new Array();
arrayN ('c', [1, 1], 50);

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

etc 28.07.2006 15:49

Цитата:

Сообщение от iNils
доступна везде и даже до ее определения[/code]

Компилятор "поднимает" функции наверх, поэтому и доступно всегда. Литералы удобны тем, что компилятор их никуда не двигает.

iNils 28.07.2006 15:58

Цитата:

Сообщение от __etc
Компилятор "поднимает" функции наверх, поэтому и доступно всегда. Литералы удобны тем, что компилятор их никуда не двигает.

Код:

a ();
function a () {
};
//// результат
    function a ()
    end

    push 0.0, 'a'
    callFunction
    pop

Код:

a ();
a = function () {
};
//// результат
    constants 'a' 
    push 0.0, 'a'
    callFunction
    pop
    push 'a'

    function ()
    end
    setVariable


etc 28.07.2006 16:00

Ну, собственно, так и есть)

xintrea 28.07.2006 16:04

А про создание глобальных массивов так никто ничего и не скажет? :)

iNils 28.07.2006 16:08

Цитата:

Сообщение от xintrea
А про создание глобальных массивов так никто ничего и не скажет? :)

Переписал
Код:

Array.prototype.arrayN = function (arrayD, arg) {
        var arrayTemp = this;
        var len = arrayD.length - 1;
        for (var i = 0; i < len; i++) {
                if (!arrayTemp[arrayD[i]]) {
                        arrayTemp[arrayD[i]] = [null];
                }
                arrayTemp = arrayTemp[arrayD[i]];
        }
        arrayTemp[arrayD[len]] = arg;
};
//////////////
_global.arrayA = new Array ();
arrayA.arrayN ([5, 2, 3, 6], 100);
arrayA.arrayN ([5, 2, 3, 7], 200);
arrayB = [2, 2];
arrayB.arrayN ([2, 0, 0, 1], 300);
/////////////
trace (arrayA[5][2][3][6]);
trace (arrayA[5][2][3][7]);
trace (arrayB[0]);
trace (arrayB[1]);
trace (arrayB[2][0][0][1]);


xintrea 28.07.2006 16:30

2 iNils

Данке шен дарагой таварищ, все работает!


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

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