모듈:FrameWrapper: 두 판 사이의 차이
편집 요약 없음 |
편집 요약 없음 |
||
(같은 사용자의 중간 판 2개는 보이지 않습니다) | |||
4번째 줄: | 4번째 줄: | ||
local modulename = frame.args[1] | local modulename = frame.args[1] | ||
local funcname = frame.args[2] | local funcname = frame.args[2] | ||
local | local len = 0 -- 인자의 갯수 | ||
local args = {} | local args = {} | ||
local seq = false -- 익명 인자만 있는지 여부 | |||
-- 인자 테이블 복사 및 개수 세기 | |||
for key, value in pairs(frame.args) do | 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 | end | ||
20번째 줄: | 24번째 줄: | ||
local func = pk[funcname] | local func = pk[funcname] | ||
if | if seq then -- 익명 인자만 있는 경우 | ||
return func(unpack(args)) | return func(unpack(args)) -- 풀어서 전달 | ||
else | else | ||
return func(args) | return func(args) -- 테이블로 묶어서 전달 | ||
end | end | ||
end | end | ||
-- 여러 인자와 테이블 모두 받을 수 있음 | |||
function p.wrap(func, tbl, ...) | function p.wrap(func, tbl, ...) | ||
local args = type(tbl) == 'table' and tbl or {tbl, ...} | local args = type(tbl) == 'table' and tbl or {tbl, ...} | ||
local cframe = mw.getCurrentFrame() | local cframe = mw.getCurrentFrame() |
2024년 9월 26일 (목) 14:02 기준 최신판
wrap[원본 편집]
위키텍스트용 함수를 루아에서 실행합니다. 첫번째 인자에 위키텍스트용 함수를, 그 뒤에 함수 인자를 전달합니다. 인자에 이름을 지정하고 싶다면 인자를 테이블로 묶어 전달할 수 있습니다.
function func(frame)
...
end
local fw = require('모듈:FrameWrapper')
fw.wrap(func, ...)
fw.wrap(func, {...})
unwrap[원본 편집]
루아용 함수를 위키텍스트에서 실행합니다. 모듈 이름은 require 함수에 사용되는 모듈 이름을 작성하며, 모듈: 이름공간의 모듈은 이름공간 접두어도 포함해야 합니다.
{{#invoke:FrameWrapper|unwrap|(모듈 이름)|(함수 이름)|...}}
require('(모듈 이름)').(함수 이름)(...) -- 익명 인자만 있을 경우
require('(모듈 이름)').(함수 이름)({...}) -- 이름이 있는 인자가 있는 경우
이름을 지정한 인자가 있으면 모든 인자가 테이블 하나로 묶여 전달됩니다.
위 설명은 모듈:FrameWrapper/설명문서의 내용을 가져와 보여주고 있습니다. (편집 | 역사) 이 모듈에 대한 수정 연습과 시험은 연습장 (만들기 | 미러)과 시험장 (만들기)에서 할 수 있습니다. 분류는 /설명문서에 넣어주세요. 이 모듈에 딸린 문서. |
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, ...)
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