위키백과:루아

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
위키백과 이름공간
기본 이름공간 토론 이름공간
0 일반 토론 1
2 사용자 사용자토론 3
4 위키백과 위키백과토론 5
6 파일 파일토론 7
8 미디어위키 미디어위키토론 9
10 틀토론 11
14 분류 분류토론 15
100 들머리 들머리토론 101
102 위키프로젝트 위키프로젝트토론 103
828 모듈 모듈토론 829
가상 이름공간
-1 특수
-2 미디어
v  d  e  h

루아Scribunto 미디어위키 확장 기능을 통해 한국어 위키백과에서 사용 가능한 프로그래밍 언어입니다. 루아는 틀에서 {{#invoke:}} 기능을 통해 호출할 수 있습니다.

루아의 소스코드는 모듈 이름공간(예: 모듈:Bananas)에 저장됩니다. 각 모듈은 {{#invoke:}}를 통해 호출할 수 있습니다. 예를 들어 {{#invoke:Bananas|hello}}는 “Hello, world!”를 출력합니다.

모듈의 실행 방법[편집]

일반 위키 문서에서[1] 모듈은 #invoke 특수 함수를 이용해서 실행합니다.[2] #invoke 함수의 문법은 일반적인 위키백과:틀에서 사용하는 문법과 유사하지만, 약간의 차이가 있습니다. 가장 큰 차이는 ‘함수 이름’을 반드시 적어야 한다는 것입니다. 함수는 값들을 입력받아서 처리한 다음에 결과값을 되돌려주는 지시들의 모음입니다. [3] 변수들을 받아서 처리하고 결과를 돌려주는 점은 틀과 유사합니다. 그러나 하나의 위키백과:틀 문서가 하나의 틀만을 담고 있지만, 하나의 위키백과:모듈 문서는 함수를 여러개 담고 있을 수도 있습니다.[4]

우리는 루아 모듈을 직접 실행하는 것이 아니라, 모듈이 담고 있는 함수만을 실행합니다. 모듈은 함수를 담고 있는 상자에 불과하며, 그것 자체로는 아무것도 하지 않습니다.[5] 그러므로 함수 이름을 반드시 써야 하는 두가지 이유가 있는데, 모듈은 직접 실행할 수 없기 때문이며, 함수 이름이 없으면 루아는 우리가 어느 함수를 실행하기를 원하는지 모르기 때문입니다.

위키 문서에서 모듈을 실행하는 간단한 방법은 다음과 같습니다:

{{#invoke: 모듈 이름|함수 이름}}

예를 들어, 모듈:Bananas가 가지고 있는 ‘hello’라는 이름의 함수는 이렇게 실행합니다.

  • {{#invoke:Bananas|hello}} → Hello, world!

변수 사용법[편집]

변수를 모듈에 전달하는 방법은 틀에 전달하는 방법과 유사합니다. 그러나 첫 번째 파이프 문자 뒤에는 반드시 함수 이름을 적는다는 점을 꼭 기억해야 합니다. 두 번째 파이프 다음에 오는 것이 첫 번째 변수입니다.

{{#invoke: 모듈 이름|함수 이름|첫 번째 변수|두 번째 변수|변수 이름 = 값}}

예를 들어, 모듈:BananasArgs의 ‘hello’ 함수는 첫 번째 변수에 들어가는 이름에 따라서 여러 다른 사람들을 환영할 수 있습니다.

  • {{#invoke:BananasArgs|hello|Kate}} → Hello, Kate!
  • {{#invoke:BananasArgs|hello|Fred}} → Hello, Fred!

BananasArgs는 ‘count_fruit’라는 함수도 가지고 있는데, bananasapples는 우리가 가지고 있는 바나나와 사과의 수를 표현합니다.

  • {{#invoke:BananasArgs|count_fruit|apples=3|bananas=4}} → I have 4 bananas and 3 apples
  • {{#invoke:BananasArgs|count_fruit|bananas=5|apples=2}} → I have 5 bananas and 2 apples

모듈 함수의 대부분은 실행할 때 어떤 효과가 일어나는지를 설명하는, 설명 문서를 가지고 있습니다.

예제 모듈[편집]

  • 모듈:Bananas: 가장 간단한 구문으로, 항이 없는 함수 하나를 제공합니다.
  • 모듈:BananasArgs: 변수에 접근하여 사용하는 방법을 설명합니다.

도움 요청[편집]

루아를 이용해서 틀을 만드는데 도움을 얻고 싶다면 위키백과토론:루아위키백과:사랑방 (기술)에 요청을 남겨 주세요.

루아 소개[편집]

Brad Jorsch's short presentation for a basic example of how to convert a wikitext template into a Lua module (PDF)도 참고하세요

루아는 자료를 분석하고, 수식을 계산하며, 함수와 객체지향 프로그래밍을 사용한 결과를 서식화하는 스크립트 언어입니다. 어떤 루아 스크립트는 간단하지만, 표, 동적 함수, 연관 배열을 사용해서 컴퓨터 과학자들에게 흥미를 끌 정도로 복잡한 구문도 만들 수 있습니다.루아는 함수를 재귀적으로 사용할 수 있기 때문에 다른 사용자들이 모듈을 편집하는데 혼란을 줄 정도로 복잡하게 만들어서는 안됩니다. 아래는 모듈:HelloWorld에서 볼 수 있으며 "hello world" 함수를 만드는 소스코드입니다:

-- All Lua modules on Wikipedia must begin by defining a variable that will hold their
-- externally accessible functions. They can have any name and may also hold data.
my_object = {};
 
-- Add a function to the variable. These are callable in Wikipedia via the #invoke command.
-- "frame" will contain the data that Wikipedia sends this function when it is called. 
my_object.hello = function( frame ) 
 
    -- Declare a local variable and assign data to it.
    local str = "Hello World!"  
 
    -- Quit this function and send the information in "str" back to Wikipedia.
    -- The "print" function is not allowed, so all output is accomplished via 
    -- returning strings in this fashion.
    return str    
 
-- End the function.
end
 
-- All modules end by returning the variable containing its functions to Wikipedia.
return my_object
 
-- We can now use this module by calling {{#invoke: HelloWorld | hello }}.
-- The #invoke command begins with the module's name, in this case "HelloWorld",
-- then takes the name of one of its functions as an argument, in this case "hello".

루아 코드의 샘플은 "<source lang="lua">...</source>"태그를 사용하여 나타낼 수 있습니다. 루아에 대한 더 자세한 설명은 루아 (프로그래밍 언어)에서 찾을 수 있습니다. 미디어 위키에서 루아를 사용하는 방법은 mw:Extension:Scribunto/Lua reference manual에서 찾을 수 있습니다.

유닛 테스트[편집]

위키백과에서 루아에 적용할 수 있는 유닛 테스트 프레임워크는 모듈:UnitTests에 있습니다. 이 모듈을 이용하면 루아 스크립트에 값을 입력하고 결과가 적절하게 나오는지 검사할 수 있습니다. 스크립트에 문제가 생겨서 고쳐야 할 때 유닛테스트를 사용하면 짧은 시간에 오류를 검출할 수 있습니다.

모듈:Bananas에 대한 유닛 테스트는 모듈:Bananas/시험장에 만들며, 모듈토론:Bananas/시험장{{#invoke: Bananas/시험장 | run_tests}}와 같은 구문을 넣어서 시험합니다. 시험 함수 이름은 "test"로 시작해야 합니다. 예를 들어, 모듈:Bananas의 유닛 테스트는 아래와 같습니다:

-- Unit tests for [[Module:Bananas]]. Click talk page to run tests.
local p = require('Module:UnitTests')
 
function p:test_hello()
    self:preprocess_equals('{{#invoke:Bananas | hello}}', 'Hello, world!')
end
 
return p

특수기능:가리키는문서/모듈:UnitTests에서 유닛 테스트를 사용하는 모듈을 모두 볼 수 있습니다.

위키백과에 특별히 적용되는 특징[편집]

무엇보다 먼저, 루아는 {{#invoke:}}를 통하여 문자열만을 변수로 전달받을 수 있습니다. 또한 frame:expandTemplate, frame:preprocess 등을 통과한 문자열들만 전달받을 수 있습니다. 또한 위키백과의 루아는 저장 전 변환[6]이나, 틀 또는 {{...}} 구문들을 포함한 문자열은 정상적으로 출력할 수 없습니다. 또한, 한 문서에 포함되는 모든 루아 프로그램은 CPU 시간[7]이 10초를 넘어서는 안됩니다. 그리고 Scribunto 확장 루아는 표준 루아에 비해서 몇몇 함수가 부족합니다.[8]

루아 입력 제한[편집]

Scribunto 루아 코드는 문서를 해석할 때에만 실행됩니다. 그러므로 사용자 입력은 문서를 편집함으로써만 할 수 있습니다. 키보드로 수치를 입력 받아 제곱근을 구하는 상자를 만들 수도 없고, 만델브로 집합의 일부분을 마우스로 클릭하면 그 부분을 다시 계산해서 보여주는 상자를 만들 수도 없습니다. 루아 입력은 틀처럼 포함할 수 있는 문자열 문서[9]를 담을 수 있지만, 그림 파일,[10] 분류 문서에 보이는 문서의 목록, 또는 위키백과:특수 문서로 볼 수 있는 내용은 입력할 수 없습니다.

루아 틀 표시하기[편집]

루아를 사용하는 틀에 {{루아}}를 붙여 주세요. 루아의 사용과 틀의 편집에 관한 의사소통에 도움을 줍니다. 그 틀은 아래와 같습니다:

분류:루아 틀에서 루아를 사용하는 틀을 모두 보실 수 있습니다.

주석[편집]

  1. 여기에서 말하는 일반 문서는 모듈 문서가 아닌 문서를 말합니다.
  2. 반면에, 모듈 문서에서는 다른 모듈 문서를 불러 올 수 있는데, 이것을 require한다고 합니다.
  3. 여러 개의 결과값을 돌려주는 함수들도 있지만, 그러한 함수들은 일반적으로 위키 문서에서 접근하지 않습니다.
  4. 어떤 모듈 문서는 함수를 가지고 있지 않기도 하며, 이런 함수들은 일반 문서에서 접근할 수 없습니다.
  5. C 언어나 Java의 class와 마찬가지로 모듈은 변수들을 가지기도 합니다.
  6. 대표적인 것은 ~~~~ 문자열을 서명으로 변환하는 것입니다.
  7. 출력된 문서의 소스 코드를 조사하면 틀이나 모듈을 처리하는데 얼마의 시간이 걸렸는지 알 수 있습니다.
  8. 이에 대하여 (영어)mw:Extension:Scribunto/Lua reference manual#Differences from standard Lua를 참조하십시오.
  9. 틀과 같이 {{ }}안에 담을 수 있는 문서들을 말합니다.
  10. SVG 파일은 실제로는 문자열이지만, 문자열로 된 문서에 내용을 복사해 오지 않으면 입력할 수 없습니다.

함께 보기[편집]