IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Как обратиться к безымянному пакету?, AS3 1000: Ambiguous reference
chingachgoog
сообщение 28.05.2009 - 18:38
Сообщение #1


Участник
**

Группа: Пользователи
Сообщений: 157
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Итак, имеется два пакета: безымянный и именнованный. В каждом из них есть класс с одним и тем же названием.
Если мы используем эти классы по отдельности - то проблем нет, но вместе - возникает ошибка компиляции 1000, т.е. двусмысленная ссылка.
Если бы можно было непосредственно обратиться к безымянному пакету, типа безымянный_пакет.имя_класса, то проблемы бы не было, но вроде он на то и безымянный, что имени нет? Или как-то можно явно указать, что используется класс безымянного пакета?

Исходники:
файл ./Main.as (точка входа)
Код
package {
    import flash.display.*
    import b.*
    
    public class Main extends Sprite {
        new b.A() // по отдельности работает
        new A() // но вместе нет.
    }
}

файл ./A.as
Код
package {    
    public class A {
        trace("безымянный пакет")
    }            
}

файл ./b/A.as
Код
package b{
    public class A {
        trace("пакет b")
    }
}


Механизм спотыкания компилятора почти понятен.
Директивой import b.* мы делаем доступным пространство имен public пакета b
(хотя по-настоящему доступным оно становиться только после появления в коде ссылки b.A)

Сразу становиться непонятно, почему запрос A ОДНОЗНАЧНО определяет класс A именно в безымянном пакете, хотя import b.* произведен (и при удалении файла ./A.as запрос A ожидаемого определяет его как класс А из пакета b)? Никакой ошибки 1000 тут нет.

Понятно почему запрос b.A ОДНОЗНАЧНО определяется как класс А пакета b - т.к. ссылка на класс А уточняется именем пакета, т.е. дается абсолютная ссылка.

Понятно почему одновременное использование ссылок A и b.A ставит компилятор в тупик (ставит именно ссылка A, т.к. ссылка b.A уточнена). Открыты пространства имен public безымянного и именованного пакетов. И относительная (короткая) ссылка A получается двусмысленной.
Мне думается, что если уточнить ссылку А, как относящуюся именно к безымянному пакету, то ошибки 1000 не будет. Но я не знаю как это сделать и вообще не уверен, что такое возможно...

Сообщение отредактировал chingachgoog - 28.05.2009 - 18:44
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 31.05.2009 - 13:45