適当にまとめてみた ・グローバル変数の参照・代入…実行中の関数の環境 ・getfenv(0)/setfenv(0,env)…スレッドの環境 ・getfenv(1)/setfenv(1,env)…実行中の関数の環境 ・関数の中で作られた関数は親の環境を受け継ぐ 例: function f() local g = function() end return g end -- fは実行中のチャンクの環境を受け継ぎ、gはfの環境を受け継ぐ。 ・load*系で作った関数はスレッドの環境を受け継ぐ 例: local t = setmetatable({hoge="t"},{__index=_G}) hoge="main" print(t,hoge) setfenv(0,t) -- スレッドの環境が変更される print(getfenv(1),getfenv(0),hoge) -- 実行中の関数はそのまま loadstring[[ print(getfenv(1),getfenv(0),hoge) ]]()