4

私はLuaを学んでおり、次の構造に出くわしました:

button.action = function() buttonPressed() end

と同じですか

button.action = buttonPressed() end

?

button.action には、buttonPressed() によって返される値が割り当てられることは理解していますが、なぜそのような匿名関数にラップするのでしょうか?

4

3 に答える 3

2

「button.action には、buttonPressed() によって返される値が割り当てられることは理解していますが、なぜそのような無名関数にラップするのですか?」

間違えている。ステートメント:

button.action = function() buttonPressed() end

button.action呼び出されると、呼び出しを実行する無名関数に代入しますbuttonPressed()。無名関数は何も返さないため、副作用のためにのみ呼び出されることに注意してください。これは、コールバックの一般的なイディオムです。匿名関数を使用して、コードの一部 (この場合は の呼び出しのみbuttonPressed) の実行を、実行する必要があるまで遅らせます。

スニペットの名前を考えると、このコードは、ボタンが押されたときに実行されるアクションを設定していると思います。button.action()ボタンが押されると、アクションが起動され (コードの腸のどこかに、に格納されている無名関数を呼び出すような呼び出しがありますbutton.action)、呼び出しbuttonPressed()が実行されます。

于 2013-09-02T16:57:36.817 に答える
1

Lua 自体には、private/protected 変数の概念がありません。さまざまなプログラマーがさまざまな方法を使用して、同じ結果をエミュレートします。

構成の解釈については。一致endしないステートメントがあります。その構文エラーを無視しても、 の値は関数button.actionによって返されるものではありませんbuttonPressed以下に、簡単なデモンストレーションを示します。

x = function() return 'hi' end
y = function() x() end
z = x()
print( y, z, y(), 1 )

ご覧のとおり、これはおそらくプログラマーが「保護された」関数またはクラスを組み込む方法です (私の意見では)。

于 2013-09-02T11:48:44.690 に答える