0

現在、連結、loadstring、および for ループの組み合わせを使用して関数を定義しようとしています。

これは私が現在持っているものです:

> for f=1,8 do
loadstring("function f" .. f .. " () print('" .. f .. "') end")
end
> f1()
stdin:1: attempt to call global 'f1' (a nil value)
stack traceback:
    stdin:1: in main chunk
    [C]: ?

この関数は、「function f () print() end」の形式で一連のチャンクを評価します。ただし、ご覧のとおり、関数が変数 f1-f8 に正しく保存されていないようです。

4

2 に答える 2

2

loadstring() 関数は、呼び出されると、引数として指定されたコードを実行する関数を返します。実際には関数を呼び出したり、コードを実行したりしません。次のことを試してください。

for f=1,8 do
loadstring("function f" .. f .. " () print('" .. f .. "') end")()
end

追加された括弧は、loadstring() によって作成されたばかりの関数を呼び出し、番号付き関数を作成します。

于 2012-05-27T23:03:34.447 に答える
1

で同じことを達成できます

for f=1,8 do
   _G["f"..f]=function () print(f) end
end
于 2012-05-28T03:45:04.903 に答える