Это потому, что lfs вызывает lua_setglobal(L, LFS_LIBNAME);
, который устанавливает глобальную переменную lfs
, поэтому он доступен даже тогда, когда вы делаете local lfs = require "lfs"
. md5
этого не делает.
Как отмечается в комментариях, если вы запускаете это из интерпретатора Lua, вам необходимо учитывать, что local
виден только для той же строки, поэтому при работе > local a = 1
и >print(a)
будет отображаться nil
. Это не nil
для lfs
только потому, что он также устанавливает (неявно) глобальную переменную с тем же именем (как описано выше). Если вы запустите local mylfs = require "lfs"
, а затем print(mylfs)
, результаты для lfs
и md5
будут одинаковыми.