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

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
>Hsl0
편집 요약 없음
>Hsl0
편집 요약 없음
1번째 줄: 1번째 줄:
function tfnew(source)
function tfnew(source)
return function(args)
return function(args)
local length = #args
local result = mw.text.decode(mw.text.unstripNoWiki(source)):gsub("{{{%f[^{](.-)}}}", function(exp)
local result = mw.text.decode(mw.text.unstripNoWiki(source)):gsub("{{{%f[^{](.-)}}}", function(exp)
local group = mw.text.split(exp, "|")
local group = mw.text.split(exp, "|")
return args and args[tonumber(group[1]) or group[1]]
local key = tonumber(group[1]) or group[1]
local result = args and args[key]
if result then
return result
elseif type(key) == 'number' and key > length then
key = key - length
return group[2]
and '{{{' .. key .. '|' .. group[2] .. '}}}'
or '{{{' .. key .. '}}}'
end
end)
end)
return result
return result

2023년 9월 6일 (수) 12:47 판


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

위키텍스트 코드 조각에서 nowiki를 해제하고 파라미터에서 사용할 변수를 주입합니다.

모듈:IIFE와 유사하지만 변수가 할당되지 않았을 때는 기본값으로 대체하지 않고 유보하여 원본 코드가 나오게 합니다. 그러면 이 코드를 밖의 IIFE에서 변수를 대체할 수 있게 됩니다. 이런 방식으로 미디어위키 상에서 함수형 프로그래밍에 필수적인 커링을 구현합니다.

사용법

{{#invoke:Curry|(위키텍스트 코드 또는 문서명)|...(위키텍스트 코드에서 사용할 변수)}}

함수 이름이 들어가는 자리에 위키텍스트 코드나 틀 이름 및 문서명을 넣고, 그 뒤에 변수를 할당하면 됩니다.

키 없이 변수를 작성하면 1, 2, 3...과 같은 숫자 키에 할당되고, 등호를 사용하여 변수 이름을 지정할 수도 있습니다.

위키텍스트 코드 내에서 변수를 불러오는 것은 틀의 파라미터를 불러오는 방법과 동일합니다. {{{(변수 이름)}}}{{{(변수 이름)|(기본값)}}}와 같이 작성하면 변수값이 그 자리에 들어옵니다.

이 모듈은 변수가 없어도 기본값을 적용하지 않기 때문에 제일 바깥쪽에 모듈:IIFE를 사용하여 최종 마무리를 해야합니다.

예시

code_blocks 코드
{{#invoke:IIFE|{{#invoke:Curry|<nowiki>{{{1|}}}, {{{2|}}}!</nowiki>|Hello}}|World}}
code
낙서장에서 확인
description 결과
Hello, !


function tfnew(source)
	return function(args)
		local length = #args
		local result = mw.text.decode(mw.text.unstripNoWiki(source)):gsub("{{{%f[^{](.-)}}}", function(exp)
			local group = mw.text.split(exp, "|")
			local key = tonumber(group[1]) or group[1]
			local result = args and args[key]
			
			if result then
				return result
			elseif type(key) == 'number' and key > length then
				key = key - length
				return group[2]
					and '{{{' .. key .. '|' .. group[2] .. '}}}'
					or '{{{' .. key .. '}}}'
			end
		end)
		return result
	end
end


return setmetatable({}, {
	__index = function(tbl, source)
		return function(frame)
			local func = tfnew(source)
			return func(frame.args)
		end
	end
})