0

私はこれを何時間もいじっていますが、これを機能させることができないようです

for i=1, 10 do
 local frame = "MyFrame"..i

 frame:EnableMouseWheel(true)
end

そして、私が得るエラーは

メソッド 'EnableMouseWheel' の呼び出しを試みます (nil 値)

しかし、私がそうするなら

MyFrame1:EnableMouseWheel(true)

これまでに何の問題もなく、動作します

メソッドのフレーム名として変数を使用する方法はありますか?

4

2 に答える 2

1

これはうまくいきます:

local vars = getfenv()
for i=1, 10 do
    local frame = "MyFrame"..i

    vars[frame]:EnableMouseWheel(true)
end

あなたは間違った問題の解決策を探しているように見えますが。そもそもそれらを配列に格納してみませんか?

于 2013-03-14T00:56:20.440 に答える
0

文字列名を変数名に変換する場合は、グローバル オブジェクトにテーブルとしてアクセスする必要があります。

_G["MyFrame1"]

Lua warcraft がどのバージョンを使用しているかはわかりません。_G を持たない非常に古いバージョンの場合は、代わりに getglobal 関数を使用する必要があります。

getglobal("MyFrame1")

つまり、これは通常アンチパターンです。MyFrame 変数を最初に定義したのがあなたである場合は、通常は代わりに配列を使用することをお勧めします。

Myframes = {
   MyFrame1,
   MyFrame2,
}

これにより、文字列操作を回避できるため

local frame = MyFrames[i]
frame:EnableMouseWheel(true)
于 2013-03-14T00:56:39.113 に答える