6

どんなすばらしい wm モジュールも、標準変数をローカルに再定義することから始まります。そんな感じ

local table = table
local string = string
local tostring = tostring

それは何をするためのものか?この行を削除した後も、すべてのコードは正常に機能しています。

4

2 に答える 2

5

それは純粋に最適化の問題です。ローカル変数は、グローバル変数よりも読み取り/書き込みが高速です。これは、グローバルがハッシュ テーブル ルックアップ (たとえばfoo=> _G["foo"]) であり、ローカルが VM レジスタ ルックアップであるためです。そのため、ローカル変数を介してグローバルをエイリアスするためにグローバルを頻繁に使用するモジュールは珍しくありません。

あなたのコードでは、何かがトンと呼ばれてボトルネックになることがわかっていない限り、私はこのテクニックを気にしません。Lua は C ではありません。簡潔さと明快さのためにパフォーマンスを犠牲にしています。あなたがしなければならないことがわかるまで、それを元に戻さないでください。

于 2014-03-31T21:29:38.950 に答える
1

「それは何をしますか」はすでに答えられています。

「なぜそれが行われるのか」について: awesome が lua 5.2 をサポートする前 (非推奨の関数なし) に戻ると、すべてのモジュールは lua の module() 関数を使用して自分自身をセットアップしていました。これは、グローバル変数の値にアクセスできなくなったことを意味し、この「ローカル トリック」が実際に必要でした。

于 2014-04-01T19:00:20.473 に答える