--make a table for all the classes you want to expose
safeClasses = {}
--store all the ones you want
safeClasses.Form = luanet.System.Windows.Forms.Form
--etc...
--remove access to LuaInterface
luanet = nil
package.loaded.luanet = nil
--prevent future packages from being loaded
require = nil
package.loadlib = nil
Вы также можете сделать это в обратном порядке, сначала удалив глобальные и сохраненные экземпляры LuaInterface, а затем выполнив всю работу через локальную ссылку (которую может выполнить весь код в остальном блоке ).use):
--get a local reference to LuaInterface without clobbering the name
local luainterface = luanet
--delete the global reference to it
luanet = nil
--also delete it from the package store and disable package loading
package.loaded.luanet = nil
require = nil
package.loadlib = nil
--put luanet back locally at its original name (for convenience)
local luanet = luainterface
--make a table for all the classes you want to expose
safeClasses = {}
--store all the ones you want
safeClasses.Form = luanet.System.Windows.Forms.Form
--etc...
(Вы можете избежать вышеприведенного трехэтапного танца сохранения имени (local luainterface=luanet; luanet=nil; local luanet=luainterface
), локализовавшись непосредственно на luanet
, а затем удалив глобальное с помощью ссылки _G
наглобальная таблица:
local luanet=_G.luanet
_G.luanet = nil
Я просто выбрал не из-за личных предпочтений.)