function scene:createScene(event) ... end
次の構文シュガーは次のとおりです。
scene.createScene = function(self, event) ... end
次の構文シュガーは次のとおりです。
scene["createScene"] = function(self, event) ... end
あなたがしたい:
local scene["createScene"] = function(self, event) ... end
これは意味がありません。
別の言い方をlocal
すると、グローバルではなくローカルにする変数の修飾子です。どの変数で修飾しlocal function scene:createScene( event )
ますか?
createScene
は変数ではなく、テーブル内のキーscene
です。
実際、それは少し誤解を招くものです。あなたが言う時:
foo = 10
修飾なしで、foo
グローバルになります。つまり、次のようにグローバル状態に格納されます。
_G.foo = 10;
もちろん、これは次と同じ意味です。
_G["foo"] = 10;
キーワードを使用するlocal
と、テーブルに格納されず、最終的に VM レジスタに格納されます。これは、高速であり、スコープがより厳密に制約されています。
これらのいずれかを記述する場合:
function foo.bar() end
function foo:bar() end
関数値をテーブルに明示的に格納しています( foo
)。これらのステートメントは、それぞれ次のステートメントとまったく同じです。
foo["bar"] = function() end
foo["bar"] = function(self) end
リスナー関数をローカルにする必要があることに注意してください
それはどういう意味ですか?Lua では、関数は関数です。文字列や数値など、単なる別の値です。グローバル、テーブル、ローカルに保存されているか、まったく保存されていないかは関係ありません。
local foo = print
_G["zap"] = foo
doh = zap
t = { zip = doh }
t.zip("Hello, World") -- Hello, World
assert(print == foo
and zap == foo
and zap == doh
and t.zip == doh)
ここでprint
関数を渡します。それはすべて同じ関数であり、それへの参照がある限り呼び出すことができます。
コロナのことはわかりませんが、ローカルの命名規則でイベントハンドラーが指定されていないのではないかと推測しています。イベントハンドラとして登録する必要があります。たとえば、このビデオによると、Button オブジェクトには、onEvent
そのボタンのハンドラーに設定されたフィールドがあります。