Странно

Довольно странно, изучая исходники пакета flash , класса boot столкнулся с интересной особенностью.в классе boot есть определение функции

        public static function __instanceof( v : Dynamic, t : Dynamic ) {
                try {
                        if( t == Dynamic )
                                return true;
                        return untyped __is__(v,t);
                } catch( e : Dynamic ) {
                }
                return false;
        }

Но, при вызове не срабатывает - flash.Boot.__instanceof(obj1,typedef1);
Как будто такого метода нет. Но все же он существует. Читал статью про магические последовательности, знаю, что это - магическая последовательность и только через untyped пройдет, но, функция то public, а не private. Не понимаю. Может кто-то подскажет каким образом она ограничена от пользовательского доступа ? Было бы лчень полезной фичой. Доступ даёт только через untyped.

Комментарии

Весьма

Весьма интересно, спасибо!

Есть же мануал

http://haxe.org/doc/advanced/magic

Boot Magic

The Boot class of each platform stores some platform-specific initialization code (method __init) and platform-specific subtyping checks (method __instanceof). This second method is used for try..catch blocks since we need to dynamically check the exception type when filtering it. The Std.is method is a crossplatform wrapper for this method.

Спасибо

За инфу пасиб, не заметил этой тонкости, но, все же вопрос остался открытым, почему именно так ? Почему через untyped только идет, а так вне области видимости?

Вероятней всего

Вероятней всего, компилятор заранее не знает тип, возвращаемый функцией, потому и не даёт доступа к этому методу, на это же указывает и untyped. Очень порадовало, что класс boot можно дописывать под себя.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>.

Подробнее о форматировании

CAPTCHA
Этот вопрос помогает предотвратить автоматический спам
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.
To prevent automated spam submissions leave this field empty.