모듈:FrameWrapper: 두 판 사이의 차이

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
>Hsl0
(새 문서: local p = {} function p.wrap(frame) local module = frame.args[1] local func = frame.args[2] local args = {} for key, value in frame.args do if type(key) ~= 'number' then args[key] = value elseif key > 2 then args[key - 2] = value end end return require(module)[func](unpack(args)) end function p.unwrap(func, ...) local args = {...} local cframe = mw.getCurrentFrame() local frame = cframe:newChild{ title = cframe:getTitle(), args = args } return fu...)
 
편집 요약 없음
 
(다른 사용자 한 명의 중간 판 8개는 보이지 않습니다)
1번째 줄: 1번째 줄:
local p = {}
local p = {}


function p.wrap(frame)
function p.unwrap(frame)
local module = frame.args[1]
local modulename = frame.args[1]
local func = frame.args[2]
local funcname = frame.args[2]
local len = 0
local args = {}
local args = {}
local seq = false
for key, value in frame.args do
for key, value in pairs(frame.args) do
if type(key) ~= 'number' then
len = len + 1
args[key] = value
args[key] = value
elseif key > 2 then
end
args[key - 2] = value
end
if #args == len then
table.remove(args, 1)
table.remove(args, 1)
seq = true
end
end
return require(module)[func](unpack(args))
local pk = require(modulename)
local func = pk[funcname]
if seq then
return func(unpack(args))
else
return func(args)
end
end
end


function p.unwrap(func, ...)
function p.wrap(func, tbl, ...)
local args = {...}
if tbl == nil then
return function(...)
return p.wrap(func, ...)
end
end
local args = type(tbl) == 'table' and tbl or {tbl, ...}
local cframe = mw.getCurrentFrame()
local cframe = mw.getCurrentFrame()
local frame = cframe:newChild{
local frame = cframe:newChild{
26번째 줄: 44번째 줄:
return func(frame)
return func(frame)
end
end
return p

2024년 9월 26일 (목) 00:40 기준 최신판


모듈 설명문서[보기] [편집] [역사] [새로 고침]

wrap

위키텍스트용 함수를 루아에서 실행합니다. 첫번째 인자에 위키텍스트용 함수를, 그 뒤에 함수 인자를 전달합니다. 인자에 이름을 지정하고 싶다면 인자를 테이블로 묶어 전달할 수 있습니다.

function func(frame)
    ...
end
local fw = require('모듈:FrameWrapper')
fw.wrap(func, ...)
fw.wrap(func, {...})

unwrap

루아용 함수를 위키텍스트에서 실행합니다. 모듈 이름은 require 함수에 사용되는 모듈 이름을 작성하며, 모듈: 이름공간의 모듈은 이름공간 접두어도 포함해야 합니다.

{{#invoke:FrameWrapper|wrap|(모듈 이름)|(함수 이름)|...}}

이름을 지정한 인자가 있으면 모든 인자가 테이블 하나로 묶여 전달됩니다.


local p = {}

function p.unwrap(frame)
	local modulename = frame.args[1]
	local funcname = frame.args[2]
	local len = 0
	local args = {}
	local seq = false
	
	for key, value in pairs(frame.args) do
		len = len + 1
		args[key] = value
	end
	
	if #args == len then
		table.remove(args, 1)
		table.remove(args, 1)
		seq = true
	end
	
	local pk = require(modulename)
	local func = pk[funcname]
	
	if seq then
		return func(unpack(args))
	else
		return func(args)
	end
end

function p.wrap(func, tbl, ...)
	if tbl == nil then
		return function(...)
			return p.wrap(func, ...)
		end
	end
	
	local args = type(tbl) == 'table' and tbl or {tbl, ...}
	local cframe = mw.getCurrentFrame()
	local frame = cframe:newChild{
		title = cframe:getTitle(),
		args = args
	}
	return func(frame)
end

return p