IPB

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

> Error #1006: value не является функцией, баги
chingachgoog
сообщение 14.03.2013 - 17:06
Сообщение #1


Ветеран конференции
*****

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



Код
package{
    import flash.display.*
    
    public class Bug1006 extends MovieClip
    {                
        public function Bug1006() {    
            var mc:*= new MovieClip()
            (mc as MovieClip).id = 25 // Error #1006: value не является функцией
            //MovieClip(mc).id=25 // Всё нормально
            //mc.id=25 // Всё нормально
        }        
    }
}


Забавно. Мук в своей нетленке писал что мол оператор приведения типов Объект as Тип - это то же самое, что и приведение типов как Тип(Объект)Нефига. Не то же самое, да еще байт код с as длиннее (и глючнее).
Может, конечно, это и не баг, а фича, но механизма этой фичи я что-то не догоняю.


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов (1 - 3)
MustLive
сообщение 16.03.2013 - 00:46
Сообщение #2


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4832
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Вероятно Мук полностью не разобрался с этими методами приведения типов, вот и заявил, что они тождественны. А ты глубже копнул и выяснил всю правду. Так что ты можешь считать себя большим знатоком AS3, чем известный эксперт Колин Мук smile.gif.

А эта ошибка #1006 - возможно глюк. Т.к. с виду обе эти строки кода должны работать одинаково. Кстати, согласно документации, оператор as не является именно приведением типа, а проверкой соответствия типа: он возвращает первый операнд, если тип соответствует указанному во втором операнде, иначе же возвращает null. Т.е. у него немного другая задача, чем у оператора приведения типов MovieClip(mc).


--------------------
Best wishes & regards,
MustLive
Администратор сайта
http://mlfun.org.ua
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 18.03.2013 - 13:12
Сообщение #3


Ветеран конференции
*****

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



Ну да, я копнул Йогдой и байт-код там разный!
Хотя конструкция as выглядит красивее, на самом деле байт код с ней длиннее (стало быть медленней) и как оказывается глючный. Причем во время выполнения, а не на этапе компиляции! Т.е. ошибку выбрасывает именно флеш-плеер!
Таким образом выходит, что во всех случаях, кроме классов массива и времени (как раз примеры Мука) надо пользоваться приведением через Тип(объект).

Просто хочется понять причину ошибки: либо это баг, либо фича ))) Если фича, то там есть логика!

PS
Можно проще проверить во флеш-редакторе (вот для CS3):

Код
var mc=new MovieClip()
(mc as MovieClip).alpha=1
//MovieClip(mc).alpha=1


Это чтобы некоторые "знатоки" не бухтели, что мол у MovieClip (динамического-то класса!) нет свойства id.
Ок - вот вам свойство alpha, которое как мы можем догадаться ЕСТЬ по умолчанию у MovieClip ))))

Сообщение отредактировал chingachgoog - 18.03.2013 - 13:18


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 20.03.2013 - 01:17
Сообщение #4


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4832
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



По документации всё якобы должно работать. Из неё эта особенность не видна - ни в качестве фичи (что должно было быть задокументировано), ни тем более бага. О разнице между as и Тип(объект), согласно документации по AS, я написал ранее, но в целом твои примеры кода должны работать одинаково для обоих операторов.

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


--------------------
Best wishes & regards,
MustLive
Администратор сайта
http://mlfun.org.ua
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

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

 



- Текстовая версия Сейчас: 22.05.2013 - 04:01