모듈:Curry: 두 판 사이의 차이
편집 요약 없음 |
편집 요약 없음 |
||
(같은 사용자의 중간 판 15개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
local bind = require('모듈:Curry/base').bind | |||
local tf = require('모듈:TemplateFunction') | |||
return setmetatable({}, { | return setmetatable({}, { | ||
__index = function(tbl, source) | __index = function(tbl, source) | ||
return function(frame) | return function(frame) | ||
local func = | local title = mw.title.new(source, 'Template') | ||
return func | local func = title and title.exists | ||
and tf.load(source) | |||
or tf.create(source) | |||
return bind(func, frame) | |||
end | end | ||
end | end | ||
}) | }) |
2024년 10월 5일 (토) 17:53 기준 최신판
위키텍스트 코드 조각에서 nowiki를 해제하고 파라미터에서 사용할 변수를 주입합니다.
모듈:IIFE와 유사하지만 변수가 할당되지 않았을 때는 기본값으로 대체하지 않고 유보하여 원본 코드가 나오게 합니다. 그러면 이 코드를 밖의 IIFE에서 변수를 대체할 수 있게 됩니다. 이런 방식으로 미디어위키 상에서 함수형 프로그래밍에 필수적인 커링을 구현합니다.
사용법[원본 편집]
{{#invoke:Curry|(위키텍스트 코드 또는 문서명)|...(위키텍스트 코드에서 사용할 변수)}}
함수 이름이 들어가는 자리에 위키텍스트 코드나 틀 이름 및 문서명을 넣고, 그 뒤에 변수를 할당하면 됩니다. 충돌이나 오작동 등을 예방하기 위해 틀 전용 모듈인 모듈:Curry/template과 코드를 직접 입력할 때 전용 모듈인 모듈:Curry/source도 이용하실 수 있습니다.
키 없이 변수를 작성하면 1, 2, 3...과 같은 숫자 키에 할당되고, 등호를 사용하여 변수 이름을 지정할 수도 있습니다.
위키텍스트 코드 내에서 변수를 불러오는 것은 틀의 파라미터를 불러오는 방법과 동일합니다. {{{(변수 이름)}}}
나 {{{(변수 이름)|(기본값)}}}
와 같이 작성하면 변수값이 그 자리에 들어옵니다.
이 모듈은 변수가 없어도 기본값을 적용하지 않기 때문에 제일 바깥쪽에 모듈:IIFE를 사용하여 최종 마무리를 해야합니다.
예시[원본 편집]
code_blocks 코드
{{#invoke:IIFE|{{#invoke:Curry|<nowiki>{{{1|}}}, {{{2|}}}!</nowiki>|Hello}}|World}}
code
description 결과
Hello, World!
도보시오[원본 편집]
- 모듈:IIFE - 변수를 지정하지 않을 때 기본값을 바로 적용합니다.
- 모듈:Curry/source - 위키텍스트 코드 직접 입력 전용 모듈
- 모듈:Curry/template - 틀 전용 모듈
- 모듈:Curry/base - 공용 라이브러리 모듈
위 설명은 모듈:Curry/설명문서의 내용을 가져와 보여주고 있습니다. (편집 | 역사) 이 모듈에 대한 수정 연습과 시험은 연습장 (만들기 | 미러)과 시험장 (만들기)에서 할 수 있습니다. 분류는 /설명문서에 넣어주세요. 이 모듈에 딸린 문서. |
local bind = require('모듈:Curry/base').bind
local tf = require('모듈:TemplateFunction')
return setmetatable({}, {
__index = function(tbl, source)
return function(frame)
local title = mw.title.new(source, 'Template')
local func = title and title.exists
and tf.load(source)
or tf.create(source)
return bind(func, frame)
end
end
})