<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Arequire_when_needed</id>
	<title>Module:require when needed - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Arequire_when_needed"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:require_when_needed&amp;action=history"/>
	<updated>2026-04-06T05:40:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:require_when_needed&amp;diff=423790&amp;oldid=prev</id>
		<title>Sware: Created page with &quot;local getmetatable = getmetatable local ipairs = ipairs local loaded = package.loaded local pairs = pairs local require = require local select = select local setmetatable = setmetatable local tostring = tostring local unpack = unpack  local function get_nested(obj, ...) 	local n = select(&quot;#&quot;, ...) 	if n == 0 then 		return obj 	end 	obj = obj[...] 	for i = 2, n do 		obj = obj[select(i, ...)] 	end 	return obj end  local function get_obj(mt) 	local obj = require(mt[1]) 	if...&quot;</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:require_when_needed&amp;diff=423790&amp;oldid=prev"/>
		<updated>2025-01-11T13:05:47Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local getmetatable = getmetatable local ipairs = ipairs local loaded = package.loaded local pairs = pairs local require = require local select = select local setmetatable = setmetatable local tostring = tostring local unpack = unpack  local function get_nested(obj, ...) 	local n = select(&amp;quot;#&amp;quot;, ...) 	if n == 0 then 		return obj 	end 	obj = obj[...] 	for i = 2, n do 		obj = obj[select(i, ...)] 	end 	return obj end  local function get_obj(mt) 	local obj = require(mt[1]) 	if...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getmetatable = getmetatable&lt;br /&gt;
local ipairs = ipairs&lt;br /&gt;
local loaded = package.loaded&lt;br /&gt;
local pairs = pairs&lt;br /&gt;
local require = require&lt;br /&gt;
local select = select&lt;br /&gt;
local setmetatable = setmetatable&lt;br /&gt;
local tostring = tostring&lt;br /&gt;
local unpack = unpack&lt;br /&gt;
&lt;br /&gt;
local function get_nested(obj, ...)&lt;br /&gt;
	local n = select(&amp;quot;#&amp;quot;, ...)&lt;br /&gt;
	if n == 0 then&lt;br /&gt;
		return obj&lt;br /&gt;
	end&lt;br /&gt;
	obj = obj[...]&lt;br /&gt;
	for i = 2, n do&lt;br /&gt;
		obj = obj[select(i, ...)]&lt;br /&gt;
	end&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_obj(mt)&lt;br /&gt;
	local obj = require(mt[1])&lt;br /&gt;
	if #mt &amp;gt; 1 then&lt;br /&gt;
		obj = get_nested(obj, unpack(mt, 2))&lt;br /&gt;
	end&lt;br /&gt;
	mt[0] = obj&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function __call(self, ...)&lt;br /&gt;
	local mt = getmetatable(self)&lt;br /&gt;
	local obj = mt[0]&lt;br /&gt;
	if obj == nil then&lt;br /&gt;
		obj = get_obj(mt)&lt;br /&gt;
	end&lt;br /&gt;
	return obj(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function __index(self, k)&lt;br /&gt;
	local mt = getmetatable(self)&lt;br /&gt;
	local obj = mt[0]&lt;br /&gt;
	if obj == nil then&lt;br /&gt;
		obj = get_obj(mt)&lt;br /&gt;
	end&lt;br /&gt;
	return obj[k]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function __ipairs(self)&lt;br /&gt;
	local mt = getmetatable(self)&lt;br /&gt;
	local obj = mt[0]&lt;br /&gt;
	if obj == nil then&lt;br /&gt;
		obj = get_obj(mt)&lt;br /&gt;
	end&lt;br /&gt;
	return ipairs(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function __newindex(self, k, v)&lt;br /&gt;
	local mt = getmetatable(self)&lt;br /&gt;
	local obj = mt[0]&lt;br /&gt;
	if obj == nil then&lt;br /&gt;
		obj = get_obj(mt)&lt;br /&gt;
	end&lt;br /&gt;
	obj[k] = v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function __pairs(self)&lt;br /&gt;
	local mt = getmetatable(self)&lt;br /&gt;
	local obj = mt[0]&lt;br /&gt;
	if obj == nil then&lt;br /&gt;
		obj = get_obj(mt)&lt;br /&gt;
	end&lt;br /&gt;
	return pairs(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function __tostring(self)&lt;br /&gt;
	local mt = getmetatable(self)&lt;br /&gt;
	local obj = mt[0]&lt;br /&gt;
	if obj == nil then&lt;br /&gt;
		obj = get_obj(mt)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return function(modname, ...)&lt;br /&gt;
	local mod = loaded[modname]&lt;br /&gt;
	if mod ~= nil then&lt;br /&gt;
		return get_nested(mod, ...)&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable({}, {&lt;br /&gt;
		modname,&lt;br /&gt;
		__call = __call,&lt;br /&gt;
		__index = __index,&lt;br /&gt;
		__ipairs = __ipairs,&lt;br /&gt;
		__newindex = __newindex,&lt;br /&gt;
		__pairs = __pairs,&lt;br /&gt;
		__tostring = __tostring,&lt;br /&gt;
		-- TODO: other metamethods, if needed.&lt;br /&gt;
		...&lt;br /&gt;
	})&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
</feed>