2016-12-08 38 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ああ、コンパイラは、クラス、関数、変数などの使用状況を追跡することによってコードが必要かどうかを知っています。アプリケーションの機能のサブセットが必要な大きなライブラリの場合に特に便利です。コンパイラは、あなたのアプリが機能するために不要なコードをすべて削除します。 –