리버티게임:이름공간/모듈
주제 | 토론 | ||
---|---|---|---|
0 | (게임) | 토론 | 1 |
2 | 사용자 | 사용자토론 | 3 |
4 | 리버티게임 | 리버티게임토론 | 5 |
6 | 파일 | 파일토론 | 7 |
8 | 미디어위키 | 미디어위키토론 | 9 |
10 | 틀 | 틀토론 | 11 |
14 | 분류 | 분류토론 | 15 |
828 | 모듈 | 모듈토론 | 829 |
3000 | 보존 | 보존토론 | 3001 |
사용되지 않음 | |||
12 | 도움말 | 도움말토론 | 1 |
710 | TimedText | TimedText talk | 711 |
2300 | 소도구 | 소도구토론 | 2301 |
2302 | 소도구정의 | 소도구정의토론 | 2303 |
가상 네임스페이스 | |||
-1 | 특수 | ||
-2 | 미디어 | ||
현재 리스트 (API 호출) |
리버티게임의 "모듈 이름공간"은 위키문법만으로 힘든 복잡한 계산의 처리를 가능하게 하는 스크립트를 모아둔 이름 공간입니다. 이 페이지는 Lua라는 스크립팅 언어를 사용하여 작성되는 모듈 이름공간에 대해 설명합니다.
개요
모듈은 #invoke라는 파서 함수를 사용하여 모듈을 제외한 모든 이름공간에서 호출 할 수 있습니다. #invoke 함수는 {{미궁}}과 같은 틀 호출과 비슷하지만 몇가지 차이점이 있습니다.
중요한 차이점중 하나는 틀은 한가지 동작을 수행하지만 모듈은 하나의 페이지에 많은 동작을 집어넣을 수 있다는 점입니다. 예를들어 {{Rand}}은 숫자를 랜덤으로 뽑아주는 한가지 동작을 제공하지만, 모듈:Random은 플레이어가 예측하기 힘든 임의의 동작을 지정하기 위한 기능들을 모두 모아둔 그룹입니다.
사용
모듈의 개발자들은 모듈들의 기능을 틀에서 사용할 수 있게끔 제공하고 있기에 일반적으로 모듈을 래핑한 틀을 사용할 수 있습니다. 대표적으로 모듈:GameJSONParser는 {{게임카드}}를 사용 할 수 있고, 모듈:Loop는 {{Loop}}에서 사용 할 수 있게 구현되어 있습니다. 틀을 사용하지 않고 모듈을 호출할 때는 #invoke 파서 함수를 사용합니다. 이를 사용하려면 다음과 같은 형식을 따라야 합니다.
{{#invoke:모듈이름|함수이름|인자1|인자2|...}}
간단한 예를 들자면, 모듈:Random에 있는 "lotto"란 이름을 가진 함수는 아래의 구문과 같은 방식으로 실행할 수 있습니다.
인자 사용
틀에서 인자를 전달하는 방법과 같은 방식으로 매개변수를 모듈에 전달 할 수 있습니다. 각 모듈마다 요구하는 인자가 다르며, 대부분의 경우 해당 모듈의 설명문서에 설명되어 있습니다.
작성
개요
리버티게임의 모듈은 미디어위키의 Scribunto 확장 기능을 활용하여 구현되며, 현재는 루아 언어만 지원됩니다. 루아로 모듈을 작성하기 위해서는 기본적인 루아 언어 지식이 필요하며, 이는 구글링으로 인터넷에 게시된 다양한 온라인 자료를 통해 학습 가능합니다.
루아는 파이썬과 자바스크립트같은 모던 스크립트 언어들과 많은 특징들을 공유합니다. 함수를 일급 객체로 취급하고, 변수 타입을 명시적으로 선언하지 않는 것이 그 예입니다. 파이썬이나 자바스크립트에 익숙하다면, 루아의 특정 문법과 예약어를 익히는 것만으로도 모듈을 수월하게 작성 할 수 있습니다.
구현
리버티게임의 모듈 작성에는 몇 가지 고려사항이 있습니다. 예를 들어, 모듈에서 사용되는 함수는 특정 테이블에 담겨서 반환되야하며, 일반적으로 이 테이블이름은 "p" 테이블 내에서 정의됩니다.
local p = {}
function p.hello( frame )
return "Hello, world!"
end
return p
간단한 예시입니다. 위 문법을 모듈:연습장에 붙여넣어서 테스트 할 수 있습니다. 그 후 아래와 같은 방법으로 실제 출력을 확인 할 수 있습니다.
{{#invoke:연습장|hello}}
도움
게임에 꼭 필요한 기술이 있으나 만드는 방법을 모르는 경우, 혹은 사용하는 방법이 제대로 이해가 가지 않는 경우 망설이지 마시고 버:오락실에 도움을 요청 해 주세요.