2016-12-08 6 views
2

Я новичок в OpenFL и играю с кодом OpenFL Starling Sample - Я замечаю @: сохраняю метаданные перед объявлением класса. Что это значит?Haxe/OpenFL - что делает @: держишь?

package scenes; 
import starling.display.Image; 
import starling.text.TextField; 
import starling.utils.MathUtil.deg2rad; 

import utils.TouchSheet; 

@:keep class TouchScene extends Scene 
{ 
    public function new() 
    { 
     super(); 
     var description:String = "[use Ctrl/Cmd & Shift to simulate multi-touch]"; 

     var infoText:TextField = new TextField(300, 25, description, "DejaVu Sans"); 
     infoText.x = infoText.y = 10; 
     addChild(infoText); 

     // to find out how to react to touch events have a look at the TouchSheet class! 
     // It's part of the demo. 

     var sheet:TouchSheet = new TouchSheet(new Image(Game.assets.getTexture("starling_sheet"))); 
     sheet.x = Constants.CenterX; 
     sheet.y = Constants.CenterY; 
     sheet.rotation = deg2rad(10); 
     addChild(sheet); 
    } 
} 

благодарит

ответ

3

Haxe позволяет теги метаданных о классах и функциях.

@:keep - это тег метаданных, который указывает функции компилятора dead code elimination не удалять класс или функцию, даже если он считает, что класс или функция не используется.

Есть много других built-in metadata tags.

FYI, для опытных пользователей вы можете создавать схемы и указывать свои собственные теги метаданных (и анализировать их с помощью макросов). Например, мой lazy-props library делает именно это.

+0

по какой причине нужен компилятор для устранения мертвого кода? как он знает, нужен ли код или нет? Я не понял. –

+0

@VakhtangiBeridze - это оптимизация компилятора, доступная во многих компиляторах. Прочитайте все об этом здесь: https://en.wikipedia.org/wiki/Dead_code_elimination Очевидно, что есть плюсы и минусы, а метатеги, такие как '@: keep', позволяют нам контролировать эту функцию. –

+0

@VakhtangiBeridze О, и компилятор знает, нужен ли вам код или нет, отслеживая использование классов, функций, переменных и т. Д. Это особенно полезно для больших библиотек, где вам может понадобиться только часть функций для вашего приложения. Компилятор удаляет весь код, который не нужен для вашего приложения. –

Смежные вопросы