Довольно странно, изучая исходники пакета 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 можно дописывать под себя.
Отправить комментарий