1

私は例えば機能を持っています

function run()
    print("hi")
end

「実行」という単語を含むメッセージという文字列があります。

activity = message
print(activity) --returns run

ただし、文字列アクティビティを使用して関数を実行することはできませんrun()。私が試してみました:

func = loadstring(activity.."()")
func() -- I get an error on line 1 saying: attempt to call nil
4

2 に答える 2

2

さて、関数 run は _G に格納されるので、簡単な答えは次のとおりです。

_G[message]()
于 2015-07-03T19:22:50.540 に答える
1
function run() print("hi") end
activity = "run"
loadstring(activity.."()")()

loadstringが と同じ環境で実行されている限り、これは正常に機能しrunます。つまり、このloadstring行は に相当し_G[activity]()ます。グローバルrunが他の環境で作成された場合、それは と評価されnilます。

Lua 関数が文字列と同じようにファースト クラスの値であることを考えると、可能であれば、次のようにする方がよいでしょう。

function run() print("hi") end
activity = run
activity()

ただし、これが構成ファイルなどから文字列値を取得しているコンテキストにある場合、それは機能しません。

于 2015-07-02T20:53:26.357 に答える