Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Экземпляр класса файла в статической переменной (http://www.flasher.ru/forum/showthread.php?t=210246)

callme 13.02.2015 11:31

Экземпляр класса файла в статической переменной
 
Код AS3:

package {
    public class A {
        static private const B:_B = new _B();
 
        public function A() {
 
        }
    }
}
 
class _B {
    function _B() {
 
    }
}

Ругается на
Код AS3:

static private const B:_B = new _B();

Цитата:

[Fault] exception, information=TypeError: Error #1007: Instantiation attempted on a non-constructor.
Баг?

AleXXX 13.02.2015 15:49

Не баг а фича :)
const означает неизменнное нечто, т.е. то что компилятор пропишет на этапе компиляции.
А любой объект - это область памяти, т.е. вещь переменная по своей сути. Поэтому нужно не const a var

callme 13.02.2015 16:11

Это не так. Ссылка на любой объект может быть константой.

gloomyBrain 13.02.2015 16:24

Цитата:

const означает неизменнное нечто, т.е. то что компилятор пропишет на этапе компиляции.
Вообще константа в AS3 - это переменная, в которую можно поместить значение только один раз. Все равно где и когда. Ваше определение будет работать в других языках, но не здесь.

Здесь проблема, как мне кажется, в вызове оператора new за пределами конструктора или какого-то еще метода. Для решения проблемы есть вот такой трюк:
Код AS3:

package
{
 
    public class A
    {
        private static const B:_B;
 
        {
            A.B = new _B();
        }
 
        public function A() {}
    }
}
 
class _B
{
    public function _B() {}
}

Обратите внимание - просто вставляем блок кода между символами "{" и "}". И этот блок отрабатывает в момент первого обращения к классу A.


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

nubideus 13.02.2015 16:25

Цитата:

на этапе компиляции
http://www.flasher.ru/forum/showpost...0&postcount=19

callme 13.02.2015 16:47

gloomyBrain
Спасибо за помощь. Но трюк не помог.

mayakwd 13.02.2015 17:22

Код AS3:

package {
    public class A {
        public function A() {
          // используйте _B.INSTANCE
        }
    }
}
 
class _B {
    public static const INSTANCE : _B = new _B();
    function _B() {
 
    }
}



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

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