3

モジュールを作成すると、ファイルは呼び出し環境ではなく、グローバル環境で実行されます。

-- other_file.lua
require('my_file')

-- my_file.lua
getfenv(2) == getfenv(0)   -- true
setfenv(1, {})             -- or module(...)
getfenv(2) == getfenv(0)   -- true

私はこれについて読んだことを覚えていません。どこかで言及/文書化されていますか?

(この質問は、よりrequireもむしろに関するものgetfenvです。5.2 で削除されたことは知っています。)

4

1 に答える 1

5

明示的に文書化されていませんが、正確な記述がない場合は、Lua の残りの部分と同じように動作すると想定する必要があります。つまり、グローバル環境を使用します。

dofileまた、呼び出し環境ではなく、グローバル環境でファイルを実行します。つまり、は Lua にはないdofileと同じではincludeありません。

requiredofileは基本的に、パスをサポートし、ロードされたファイルをキャッシュする のバージョンです。そのため、呼び出し環境ではなく、グローバル環境でもファイルを実行します。

于 2013-08-19T10:16:11.120 に答える