| 이 文書는 韓國語 위키百科의 情報文입니다.
이 文書는
政策과 指針
은 아니지만, 위키百科의 規範과 慣習 側面에서 共同體의 確立된 慣行을 說明하고 있습니다. 共同體의
總意
나 檢討를 어느 程度 反映하고 있습니다.
|
|
루아
는 위키百科에서 모듈을 製作할 때 使用할 수 있는 프로그래밍 言語입니다. 루아 코드는
모듈
:Bananas
처럼
모듈
이름空間에 貯藏됩니다. 모듈 機能은 미디어위키의
Scribunto
擴張 機能을 통해 具現되었으며 現在 루아 言語만 支援하고 있습니다.
모듈은
틀
文書에서 Scribunto의 機能 中 하나인
{{#invoke:모듈 이름|函數 이름|...}}
文法을 利用하여 한 番의 呼出마다 1個의 函數씩 使用할 수 있습니다.
[1]
모듈은 모듈 이름空間을 除外한 모든 이름空間에서
{{#invoke:모듈 이름}}
을 使用하여 實行할 수 있습니다. 媒介變數로 준 入力값들을 基盤으로 處理한 結果값을 받을 수 있다는 點에서
{{틀 이름}}
文法으로
틀
이 動作하는 方式과
{{#invoke:모듈 이름}}
文法으로 모듈이 動作하는 方式은 비슷합니다. 하지만 몇 가지 差異點이 있는데, 그 中 代表的인 差異點은 모듈을 使用하고자 할 땐 使用하려는 하는 모듈 안 ‘函數 이름’을 적어줘야 한다는 點입니다. 여기서 ‘
函數
’의 意味란 값들을 入力받아 處理한 後에 그 結果값을 返還하는 命令文들을 모아놓은 것을 말합니다.
[2]
또 다른 差異點으로는 1個의 틀 文書에는 1個의 틀만 定義할 수 있는 反面, 1個의 루아 모듈 文書에는 여러 個의 函數를 定義할 수 있다는 點입니다.
[3]
그뿐만 아니라 單獨으로 使用할 수 있는 틀과는 달리 루아 모듈은 그 自體만 가지고는 直接 實行할 수 없으며 한 番의
invoke
黨 하나의 函數만 實行할 수 있다는 差異點도 있습니다. 모듈은 函數들을 모아놓은 것에 不過하며 모듈 自體로는 아무것도 하지 못합니다.
[4]
結局 루아 엔진이 모듈을 불러왔을 때 函數 이름을 記載하지 않은 境遇 모듈 그 自體를 實行할 수 없는데다 모듈 안의 函數 中에서 어떤 函數를 實行해야 할 지 모르기 때문에, 모듈을 使用하고자 할 땐 使用하려는 函數 이름을 같이 넣어주어야 합니다.
위키 文書에서 모듈을 實行하는 가장 簡單한 方法은 다음과 같습니다.
{{#invoke:모듈 이름|函數 이름}}
例를 하나 들자면,
모듈:Bananas
에 있는 "hello"란 이름을 가진 函數는 아래의 構文과 같은 方式으로 實行할 수 있습니다.
{{#invoke:Bananas|hello}}
→ Hello, world!
媒介變數 使用하기
[
編輯
]
媒介變數는 틀에 傳達되는 方式과 同一한 方式을 利用하여 모듈에 傳達됩니다. 하지만 注意해야 할 것이 있는데, 첫 番째
數直線 文字
(
|
)의 뒤에 位置해야 하는 것은 반드시 函數 이름이여야 하며, 모듈로 傳達될 첫 番째 媒介變數는 두 番째 垂直線 文字(
|
)의 뒤에 位置해야 한다는 것입니다.
{{#invoke:모듈 이름|函數 이름|첫 番째 變數|두 番째 變數|變數 이름=값}}
例를 몇個 들자면,
모듈:BananasArgs
의 "
hello
" 函數는 다음의 코드처럼 첫 番째 媒介變數에 따라 서로 다른 사람들에게 人事합니다.
{{#invoke:BananasArgs|hello|西燕}}
→ 安寧하세요, 서연님!
{{#invoke:BananasArgs|hello|민준}}
→ 安寧하세요, 민준님!
또한 BananasArgs엔
바나나
와
謝過
란 (이름을 가진) 媒介變數를 使用하여 使用者가 가지고 있는
바나나
와
謝過
의 個數를 入力받는 "
count_fruit
"란 函數가 存在하며 다음과 같이 動作합니다.
{{#invoke:BananasArgs|count_fruit|謝過=3|바나나=4}}
→ 저는 바나나 4個와 沙果 3個를 가지고 있습니다.
{{#invoke:BananasArgs|count_fruit|바나나=5|謝過=2}}
→ 저는 바나나 5個와 沙果 2個를 가지고 있습니다.
大部分의 모듈은 使用할 수 있는 媒介變數들과 그 媒介變數들이 어떤 役割을 하는지를 잘 說明한 說明文書를 가지고 있습니다.
루아를 利用해서 틀을 만드는데 도움을 얻고 싶다면
위키百科討論:루아
나
위키百科:舍廊房 (技術)
에 要請을 남겨 주세요.
- Brad Jorsch's short presentation for a basic example of how to convert a wikitext template into a Lua module (PDF)
도 參考하세요
루아는 資料를 分析하고, 數式을 計算하며, 函數와
客體志向 프로그래밍
을 使用한 結果를 棲息化하는
스크립트 言語
입니다. 어떤 루아 스크립트는 簡單하지만, 票, 動的 函數,
聯關 配列
을 使用해서
컴퓨터 科學者
들에게 興味를 끌 程度로 複雜한 構文도 만들 수 있습니다.루아는 函數를 再歸的으로 使用할 수 있기 때문에 다른 使用者들이 모듈을 編輯하는데 混亂을 줄 程度로 複雜하게 만들어서는 안됩니다. 아래는
모듈:HelloWorld
에서 볼 수 있으며 "hello" 函數를 만드는 소스코드입니다:
-- 위키百科의 모든 모듈은 테이블 變數를 定義해주는 것부터 始作해야 합니다.
-- 이 變數는 모듈 外部에서 接近하는 函數들이 이 모듈을 쓸 수 있게끔 해줍니다.
my_object
=
{};
-- 테이블 變數에 函數를 追加합니다. 函數를 쓸땐 #invoke 命令語로 쓸수 있습니다.
-- "frame"엔 위키百科에서 函數를 呼出했을 때 같이 傳達된 데이터(媒介變數 等)가
-- 包含되어 있을 것입니다.
my_object
.
hello
=
function
(
frame
)
-- 地域 變數를 宣言한 뒤 데이터를 넣습니다.
-- (이 過程을 '값을 代入한다'라고 表現하기도 합니다.)
local
str
=
"Hello World!"
-- 函數를 終了함과 同時에 "str"의 데이터를 위키百科로 返還합니다.
-- "print" 函數는 許容되지 않으므로 위키百科로 出力할 데이터들은 이 方法처럼
-- 文字列로 返還해야 합니다.
return
str
-- 函數의 끝입니다.
end
-- 위키百科의 모든 모듈은 函數가 包含된 變數를 返還하는 것으로 끝나야 합니다.
return
my_object
-- 이제 {{#invoke: HelloWorld | hello }}를 通해 이 모듈을 쓸 수 있습니다.
-- #invoke 命令語를 쓸 땐 모듈의 이름(HelloWorld)을 넣고,
-- 쓰고자 하는 函數의 이름(hello)을 媒介變數로 넣어줍니다.
루아 코드의 샘플은
<syntaxhighlight lang="lua">...</syntaxhighlight>
태그를 使用하여 나타낼 수 있습니다. 루아에 對한 더 仔細한 說明은
루아 (프로그래밍 言語)
에서 찾을 수 있습니다. 미디어 위키에서 루아를 使用하는 方法은
mw:Extension:Scribunto/Lua reference manual
에서 찾을 수 있습니다.
위키百科엔
모듈:UnitTests
이라는 루아 스크립트를 위한
유닛 테스팅
프레임워크가 있습니다. 이 프레임워크는 여러 個의 入力값을 여러분의 스크립트에 넣은 뒤 結果값이 期待한대로 잘 출력되는지 確認할 수 있게 해줍니다. 또한 유닛 테스트 技法을 使用하기 때문에 스크립트를 修正하면서 發生한 새로운 問題들, 卽
回歸 버그
를 빠르게 잡아낼 수 있어서 매우 有用합니다.
유닛 테스트를 遂行하는 모듈은
英語 위키百科
의 慣例에 따라 테스트 對象 모듈의 '試驗場' 下位文書에 貯藏하며, 그 下位文書의 討論文書에서 유닛 테스트를 實行합니다. 例로 들어
모듈:Bananas
같은 모듈이 있을 境遇, 이 모듈의 유닛 테스트는
모듈:Bananas/試驗場
에 位置하게 되며,
모듈討論:Bananas/試驗場
에서
{{#invoke: Bananas/testcases | run_tests}}
式으로 實行시킵니다. 또한 테스트 메소드의 이름은 반드시 "
test
"로 始作해야 합니다. 아래는
모듈:Bananas/試驗場
에서 가져온 簡單한 例題입니다.
-- [[모듈:Bananas]]의 테스트 케이스입니다. 테스트를 하려면 '討論'을 클릭하세요.
local
p
=
require
(
'Module:UnitTests'
)
function
p
:
test_hello
()
self
:
preprocess_equals
(
'{{#invoke:Bananas | hello}}'
,
'Hello, world!'
)
end
return
p
유닛 테스트를 遂行하는 모든 모듈들을 보려면
特需:가리키는문서/모듈:UnitTests
을 參照하세요.
또한
모듈:ScribuntoUnit
이라 불리는
헝가리語 위키百科
에서 由來한 代用 유닛 테스팅 프레임워크가 있습니다.
모듈:UnitTests
와 機能이 매우 비슷하나 코딩 스타일이 다를 뿐더러 保護된 呼出(
pcall
)로 잡은 實際 誤謬를 던져줍니다. 또한 주어진
精密度
內에서
失手
를 比較하는 메소드度 가지고 있습니다.
무엇보다 먼저, 루아는
{{#invoke:}}
를 통하여 文字列만을 變數로 傳達받을 수 있습니다. 또한 frame:expandTemplate, frame:preprocess 等을 通過한 文字列들만 傳達받을 수 있습니다. 또한 위키百科의 루아는 貯藏 前 變換
[5]
이나, 틀 또는
{{...}}
構文들을 包含한 文字列은 正常的으로 出力할 수 없습니다. 또한, 한 文書에 包含되는 모든 루아 프로그램은 CPU 時間
[6]
이 10秒를 넘어서는 안됩니다. 그리고 Scribunto 擴張 루아는 標準 루아에 비해서 몇몇 函數가 不足합니다.
[7]
루아 入力 制限
[
編輯
]
Scribunto 루아 코드는 文書를 解釋할 때에만 實行됩니다. 그러므로 使用者 入力은 文書를 編輯함으로써만 할 수 있습니다. 키보드로 數値를 入力 받아 제곱根을 求하는 函數를 만들 수도 없고, 만델브로 集合의 一部分을 마우스로 클릭하면 그 部分을 다시 計算해서 보여주는 函數를 만들 수도 없습니다. 루아 入力은 틀처럼 包含할 수 있는 文字列 文書
[8]
를 담을 수 있지만, 그림 파일,
[9]
分類
文書에 보이는 文書의 目錄, 또는
위키百科:特需
文書로 볼 수 있는 內容은 入力할 수 없습니다.
루아를 使用하는 틀에 {{
루아
}}를 붙여 주세요. 루아의 使用과 틀의 編輯에 關한 意思疏通에 도움을 줍니다. 그 틀은 아래와 같습니다:
| 이 틀은
루아
를 使用합니다:
|
分類:루아 틀
에서 루아를 使用하는 틀을 모두 보실 수 있습니다.
- ↑
例로 들어
모듈:Bananas/說明文書
에선 "Hello, world!"를 出力하기 위해
{{#invoke:Bananas|hello}}
코드를 使用하고 있습니다.
- ↑
여러 個의 結果값을 返還할 수도 있지만 그런 函數들은 一般的으로 위키 文書에서 잘 쓰이지 않습니다.
- ↑
하지만 어떤 루아 모듈엔 函數가 한 個도 없을 수 있으며, 이런 모듈은 當然히 一般 文書에서 使用할 수 없으며 특수한 用途로 使用됩니다.
- ↑
하지만 例外的인 境遇가 있는데, 다른 모듈에게 自身이 가진 變數의 값을 提供할 目的으로써 函數없이 미리 定義된 값을 담은 變數들만 가진 境遇도 있을 수 있습니다.
- ↑
代表的인 것은 ~~~~ 文字列을 署名으로 變換하는 것입니다.
- ↑
출력된 文書의 소스 코드를 調査하면 틀이나 모듈을 處理하는데 얼마의 時間이 걸렸는지 알 수 있습니다.
- ↑
이에 對하여
(英語)
mw:Extension:Scribunto/Lua reference manual#Differences from standard Lua
를 參照하십시오.
- ↑
틀과 같이 {{ }}안에 담을 수 있는 文書들을 말합니다.
- ↑
SVG
파일은 實際로는 文字列이지만, 文字列로 된 文書에 內容을 複寫해 오지 않으면 入力할 수 없습니다.