모듈:BananasArgs

설명문서 [편집] [역사] [새로고침]

미디어위키 모듈의 작동 원리를 파악하기 위한 예제 모듈입니다.

모듈 사용법[원본 편집]

{{#invoke:(모듈명)|(함수명)|(변수명)}} 형식으로 사용합니다. 이 BananasArgs 모듈을 호출할 때는 {{#invoke:BananasArgs|(함수명)}} 형식으로 호출합니다.

매개변수가 없는 함수[원본 편집]

매개변수가 없는 함수는 그냥 함수명만 호출하면 됩니다. 이 모듈의 hello_world 함수가 대표적인 예입니다.

  • 입력 : {{#invoke:BananasArgs|hello_world}}
  • 결과 : Hello, world!

매개변수에 별도의 키 이름이 지정되지 않은 경우[원본 편집]

매개변수에 변수명이 지정되지 않는 경우 Lua 언어의 특성상 1번부터 키값이 자동으로 할당됩니다. 키값을 표시하지 않고 사용하시면 됩니다.

  • 1변수 함수 입력 : {{#invoke:BananasArgs|hello|{{사용자}}}}
  • 결과 : 안녕하세요, 사용자님!
  • 2변수 함수 입력 : {{#invoke:BananaArgs|add|5|3}}
  • 결과 : 8

매개변수에 별도의 키 이름이 지정된 경우[원본 편집]

매개변수에 키 이름이 지정된 경우에는 함수 뒷부분에 (키 이름)=(키값) 형식으로 지정해야 합니다.

  • 입력 : {{#invoke:BananasArgs|count_fruit|바나나=5|사과=3}}
  • 결과 : 저는 바나나 5개와 사과 3개를 가지고 있습니다.

함수에 따라서는 별도의 키 이름이 지정되지 않은 경우와 별도의 키 이름이 지정된 경우 둘 다 포함하는데, 그 경우에는 보통 키 이름이 지정되지 않은 변수를 앞에, 키 이름이 지정된 변수를 뒤에 작성합니다.

  • 입력 : {{#invoke:BananasArgs|has_fruit|민준|바나나=5|체리=7}}
  • 결과 : 민준님은 바나나 5개 체리 7개를 가지고 있습니다.

매개변수를 변수로 받는 함수[원본 편집]

Lua 모듈의 좋은 점 중에 하나가 키값 자체도 변수로 받을 수 있다는 것입니다. 이 BananaArgs 모듈에서도 custom_fruit 함수는 뒤에 (키 이름)=(키값) 부분을 "(키 이름) (키값)개" 문자열로 치환합니다. 매개변수의 갯수나 키 이름을 임의로 지정할 수 있으며, 다만 키 이름은 과일명으로, 키 값은 숫자일 때 자유롭게 문장을 만들 수 있습니다.

  • 입력 : {{#invoke:BananasArgs|custom_fruit|파인애플=10|키위=5}}
  • 결과 : 저는 파인애플 10개 키위 5개를 가지고 있습니다.
  • 입력2 : {{#invoke:BananasArgs|custom_fruit|사과=6|딸기=7|포도=10|용과=4}}
  • 결과2 : 저는 용과 4개 포도 10개 딸기 7개 사과 6개를 가지고 있습니다.
Wikipedia-ico-48px.png
이 모듈 문서는 한국어 위키백과모듈:BananasArgs 문서에서 분기하였습니다.
연습장이나 사용자 문서에서 틀의 사용이나 수정을 연습할 수 있습니다.
분류는 /설명문서에 넣어주세요.

-- 매개변수에 어떻게 접근하는지 보여주는 예제 모듈
-- Frame 객체에 대해 더 자세히 알고 싶으시면, http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Frame_object를 참고하세요.
-- 유닛 테스트는 [[모듈:BananasArgs/시험장]]에 있습니다.
 
local p = {}
 
-- 매개변수 없음
-- 이런 식으로 씀: {{#invoke:BananasArgs|hello_world}}
function p.hello_world()
    return "Hello, world!"
end
 
-- 한개의 매개변수
-- 이런 식으로 씀: {{#invoke:BananasArgs|hello|민준}}
function p.hello(frame)
    local name = frame.args[1]
    return "안녕하세요, " .. name .. "님!"
end
 
-- 두개의 매개변수
-- 이런 식으로 씀: {{#invoke:BananasArgs|add|5|3}}
function p.add(frame)
    local num1 = tonumber(frame.args[1])
    local num2 = tonumber(frame.args[2])
    return num1 + num2
end
 
-- 이름을 가진 매개변수
-- 이런 식으로 씀: {{#invoke:BananasArgs|count_fruit|바나나=5|사과=3}}
function p.count_fruit(frame)
    local num_bananas = frame.args['바나나']
    local num_apples = frame.args['사과']
    return '저는 바나나 ' .. num_bananas .. '개와 사과 ' .. num_apples .. '개를 가지고 있습니다.'
end
 
-- 일반적인 매개변수와 이름을 가진 매개변수를 혼합해서 사용하기
-- 이런 식으로 씀: {{#invoke:BananasArgs|has_fruit|민준|바나나=5|체리=7}}
function p.has_fruit(frame)
    local name = frame.args[1]
    local num_bananas = frame.args['바나나']
    local num_apples = frame.args['사과']
    local num_cherries = frame.args['체리']
 
    local result = name .. '님은'
    if num_bananas then result = result .. ' 바나나 ' .. num_bananas .. '개' end
    if num_apples then result = result .. ' 사과 ' .. num_apples .. '개' end
    if num_cherries then result = result .. ' 체리 ' .. num_cherries .. '개' end
	result = result .. '를 가지고 있습니다.'
    return result
end
 
-- 매개변수를 반복해서 읽기
-- 이런 식으로 씀: {{#invoke:BananasArgs|custom_fruit|파인애플=10|키위=5}}
function p.custom_fruit(frame)
    local result = '저는'
    for name, value in pairs(frame.args) do
        result = result .. ' ' .. name .. ' ' .. value .. '개'
    end
	result = result .. '를 가지고 있습니다.'
    return result
end
 
-- 별도로 써야하는 매개변수와 함께 매개변수를 반복해서 읽기
-- 이런 식으로 씀: {{#invoke:BananasArgs|custom_fruit_2|민준|파인애플=10|키위=5}}
function p.custom_fruit_2(frame)
    local name = frame.args[1]
    local result = name .. '님은'
    for name, value in pairs(frame.args) do
	    -- name이 1이 아니라면(~=)
        if name ~= 1 then
            result = result .. ' ' .. name .. ' ' .. value .. '개'
        end
    end
	result = result .. '를 가지고 있습니다.'
    return result
end
 
return p