Wikipedia:Lua

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Luaは、MediaWikiへのScribunto拡張により利用可能となったプログラミング言語です。Luaのコードをテンプレートに組み込んで、{{#invoke:}}という構文を使って呼び出すことができます。

Luaのソースコードは、モジュール空間(例:モジュール:Bananas)に置かれます。そして、各モジュールを、テンプレートとして別なページから呼び出せるようになっています(例えば、モジュール:Bananas/docでは、{{#invoke:Bananas|hello}}と書くことで、「Hello, world!」という出力を得ています)。


サンプルモジュール[編集]


Luaについて[編集]

Luaはデータの解析、式の演算、文字の書式化などを、オブジェクト指向として行えるスクリプト言語です。言語自体は理解しやすいようシンプルになっていますが、表、動的関数、添字に文字列を使える連想配列など、複雑な構造も使えるようになっています。再帰のような複雑な構造もとれますが、いたずらに複雑なモジュールを作って、第三者が誰も理解できない、ということがないように注意してください。

以下に、モジュール:HelloWorldにあります、Hello, World!プログラムのソースコードを示します。

-- WikipediaのLuaモジュールは、外部からアクセスできる関数を入れる変数の
-- 宣言から始める必要があります。この変数にデータを入れることもできます。
my_object = {};
 
-- そして、変数に関数を追加します。そうすることで、Wikipediaから #invokeとして呼び出せるようになります。
--# Add a function to the variable. These are callable in Wikipedia via the #invoke command. 
-- frame変数には、呼び出し時にWikipediaから渡されるデータが入ります。
my_object.hello = function( frame ) 
 
    -- ローカル変数の宣言と初期化
    local str = "Hello World!"  
 
    -- strをWikipedia側に戻して関数を脱出します。
    -- printのような関数は使えないので、出力はこのように文字列の返り値でやり取りします。
    return str    
 
-- 関数の終わり
end
 
-- モジュールの終わりでは、関数を含んだオブジェクトをWikipedia側に返します。
return my_object
 
-- こうすれば、{{#invoke: HelloWorld | hello }}のような形でこのモジュールを使えます。
-- #invokeでは、直後にモジュール自体の名前、次の引数に関数名を渡します。

MediaWikiでLuaを使う上でのガイドが、mw:Extension:Scribunto/Lua reference manualにあります(英語)。


Wikipedia固有のポイント[編集]

概要[編集]

Luaの入力としては、{{#invoke:}}で渡されたテキストの引数と、frameにある関数群だけがウィキペディアから情報を得るために使えます。そして、Luaからの出力では、テンプレートなど{{...}}で書くようなものを含むことはできません。さらに、Luaの実行時間は10秒以内という制限もあります(ページのソースを見れば、処理時間を確認できます)。また、通常のLuaから削ってある関数もいろいろとあります(mw:Extension:Scribunto/Lua reference manual#Differences from standard Luaに詳細があります)。

Luaへの入力[編集]

ScribuntoにおけるLuaの実行は、ページのパース時に行われるので、ページに書き込んだ情報以外を使うこと、たとえば入力ボックスを作って入力させるとか、マウスの位置を検出するとかといったことは不可能です。Luaの入力としては、他のページをトランスクルードすることはできますが、SVGファイルを含めメディアファイルやカテゴリの中身、特別ページの内容は取得できません。

ウィキテキスト[編集]

いわゆるパイプの裏技[[Wikipedia:ヘルプ|]])は、Luaの出力中では適用されないので、[[Wikipedia:ヘルプ|ヘルプ]]のように省略しない形で書く必要があります。また、~~~~が署名へ展開されることもありません。別なテンプレートの呼び出し、マジックワード、条件文など{{...}}で書くものや、<ref><nowiki>といった、MediaWiki側で処理するタグも、Luaの出力中では処理されません。

関連項目[編集]