私はLuaを学んでおり、次の構造に出くわしました:
button.action = function() buttonPressed() end
と同じですか
button.action = buttonPressed() end
?
button.action には、buttonPressed() によって返される値が割り当てられることは理解していますが、なぜそのような匿名関数にラップするのでしょうか?
私はLuaを学んでおり、次の構造に出くわしました:
button.action = function() buttonPressed() end
と同じですか
button.action = buttonPressed() end
?
button.action には、buttonPressed() によって返される値が割り当てられることは理解していますが、なぜそのような匿名関数にラップするのでしょうか?
「button.action には、buttonPressed() によって返される値が割り当てられることは理解していますが、なぜそのような無名関数にラップするのですか?」
間違えている。ステートメント:
button.action = function() buttonPressed() end
button.action
呼び出されると、呼び出しを実行する無名関数に代入しますbuttonPressed()
。無名関数は何も返さないため、副作用のためにのみ呼び出されることに注意してください。これは、コールバックの一般的なイディオムです。匿名関数を使用して、コードの一部 (この場合は の呼び出しのみbuttonPressed
) の実行を、実行する必要があるまで遅らせます。
スニペットの名前を考えると、このコードは、ボタンが押されたときに実行されるアクションを設定していると思います。button.action()
ボタンが押されると、アクションが起動され (コードの腸のどこかに、に格納されている無名関数を呼び出すような呼び出しがありますbutton.action
)、呼び出しbuttonPressed()
が実行されます。
Lua 自体には、private/protected 変数の概念がありません。さまざまなプログラマーがさまざまな方法を使用して、同じ結果をエミュレートします。
構成の解釈については。一致end
しないステートメントがあります。その構文エラーを無視しても、 の値は関数button.action
によって返されるものではありませんbuttonPressed
。以下に、簡単なデモンストレーションを示します。
x = function() return 'hi' end
y = function() x() end
z = x()
print( y, z, y(), 1 )
ご覧のとおり、これはおそらくプログラマーが「保護された」関数またはクラスを組み込む方法です (私の意見では)。