2016-12-08 6 views
2

Je suis nouveau à OpenFL et jouer avec le code OpenFL Starling Sample - Je remarque un @: garder métadonnées avant la déclaration de classe. Qu'est-ce que ça veut dire?Haxe/OpenFL - qu'est-ce que @: garder signifie?

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); 
    } 
} 

grâce

Répondre

3

Haxe permet des balises de métadonnées sur les classes et les fonctions.

@:keep est une balise de métadonnées qui indique à la fonctionnalité dead code elimination du compilateur de ne pas supprimer la classe ou la fonction, même si elle estime que la classe ou la fonction est inutilisée.

Il existe beaucoup d'autres built-in metadata tags. Pour les utilisateurs avancés, vous pouvez créer des schémas et spécifier vos propres balises de métadonnées (et les analyser à l'aide de macros). Par exemple, mon lazy-props library fait exactement cela.

+0

pour quelle raison le compilateur doit-il éliminer le code mort? comment sait-il besoin de coder ou non? Je n'ai pas compris. –

+0

@VakhtangiBeridze c'est une optimisation de compilateur disponible dans de nombreux compilateurs. Lisez tout à ce sujet ici: https://en.wikipedia.org/wiki/Dead_code_elimination Évidemment, il y a des avantages et des inconvénients, et des métabalises comme '@: keep' nous permettent de contrôler la fonctionnalité. –

+0

@VakhtangiBeridze Oh, et le compilateur sait si vous avez besoin de code ou non en suivant l'utilisation des classes, fonctions, variables, etc. Il est particulièrement utile pour les grandes bibliothèques, où vous aurez besoin d'un sous-ensemble de fonctionnalités. Le compilateur supprime tout le code inutile pour que votre application fonctionne. –