0

検討:

関数function_name(var_one、var_two)
    var_one = var_two
    var_oneを返します
終わり

print(function_name( "string_one"、 "string_two"))

にアポーズするようにlocal var_one = var_two

var_one現在はグローバル変数ですか、それとも関数のローカルスコープにありますか?

local var_one使用する必要がありますか、それともすでにスコープ内にありますか?

4

2 に答える 2

3

いいえ、これは必要ありません。名前var_oneはすでにローカルです。元の値を消去するだけです。_G.var_oneグローバルを明示的に参照する場合は、を使用する必要があります。

于 2012-05-29T20:22:03.270 に答える
0

引数は(すでに)ローカル変数です。

それ(代入)を参照すると、その名前の字句スコープの変数が検索されます。ローカル変数を見つけて使用します。

関数がクロージャの場合、「アップバリュー」(非ローカル変数)になるのはこのローカル変数です。

ローカル変数が見つからない場合は、代わりにグローバルルックアップを実行します。グローバルルックアップを強制する場合は、手動でグローバルテーブルに移動します。これがグローバルルックアップであるためです。

変数の割り当てを変更してローカルとして宣言すると、実際には、引数とは異なる、字句スコープの新しいローカル変数が作成されますが、字句的に非表示になります。

于 2012-08-28T12:13:37.320 に答える