2011-11-23 5 views
1

LUAテーブル構造の配列部分を利用してオブジェクト指向のLUAを使用する構文的な砂糖はありますか?オブジェクト指向LUAの基礎となる連想記憶機構

-- foo_index == number 
local foo_index = global_bar_object_prototype.foo; 
bar[foo_index]("hello world"]; 

--vs. 
-- file 2 bar.foo type == function 
bar.foo("hello world"); 

-- both versions call the same function with the same input 

私はluajitはそれを配列のようなアクセス特性を与える文字列キーのアクセスをキャッシュ/最適化するために、インターン間のチャンクの文字列を行うだろう期待していました。しかし、私の素朴なベンチマークはこの仮定を裏付けました。私はベンチマークのロジックが壊れていて、文法的な砂糖を探す必要がないと思っています。

オブジェクト指向のルアを行うイディオムは、高性能スクリプトの目的でO(1)(関数参照)の特性を持っていますか?私はゲームインターフェイスのプログラマがこれらの最初の手を見ていると確信しています。

+0

男、石を投げて手を隠すことはできません:)そのベンチマークはどこですか? – kikito

+0

私は自分のデスクトップに着いたらそれを置くでしょう:) –

+0

@HassanSyed - なぜこのタグに[tag:embedded]タグを付けましたか? [tag wiki](http://stackoverflow.com/tags/embedded/info)を読んで、ここでどのように適用するか、または削除するかを説明してください。ありがとう! –

答えて

1

私は質問を理解し、しかし、あなたは、

bar[foo_index]("hello") 

が動作するようなオブジェクトとしてバーテーブルを定義する方法があるかどうかを求めているならばそうな方法があるわからない:メタテーブルはbarの__indexを定義して、キーとして整数をとり、関連するメソッドを返すことができます。バー "コンストラクタ"のどこかで、インデックスの "メソッド"へのマッピングを定義します。 __indexはそのマッピングを調べ、関数を返します。

あなたはおそらくもメソッド名を取り、対応するインデックスを返すメソッドを追加することになりますので、呼び出し側は、マッピングコンストラクターが作成されます何を知っている必要はありません。

foo_index = bar.getMethodIndex('foo') 
bar[foo_index]("hello") 

LUAによって許可された別の最適化が

です
foo_meth = bar.foo 
foo_meth(bar, "hello") 
関連する問題