ウィキペディア:Lua

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
ウィキペディアのデータ構造
サブジェクト名前空間 名前空間を話す
0 (主な記事) トーク 1
2 ユーザー ユーザートーク 3
4 ウィキペディア ウィキペディアトーク 5
6 ファイル ファイルトーク 7
8 MediaWiki MediaWikiトーク 9
10 レンプレート テンプレートトーク 11
12 ヘルプ 話すのを手伝ってください 13
14 カテゴリー カテゴリートーク 15
100 ポータル ポータルトーク 101
118 下書き ドラフトトーク 119
710 TimedText TimedTextトーク 711
828 モジュール モジュールトーク 829
非推奨
2300 ガジェット ガジェットトーク 2301
2302 ガジェットの定義 ガジェット定義トーク 2303
-1 特別な
-2 メディア

Lua、英語版ウィキペディアのScribuntoMediaWiki 拡張機能から利用できるプログラミング言語ですScribuntoの「{{#invoke:}}」機能を使用することで、Luaコードをwikiテンプレートに埋め込むことができるようになりました。この拡張機能は、2015年7月の時点でLua5.1をサポートしています

Luaソースコードはモジュールと呼ばれるページに保存されます(例:Module:Example)。次に、これらの個々のモジュールが(コードによって{{#invoke:<Module name>|<Function name>|(optional) param1 | param2...}}呼び出されます例:

ウィキテキスト 結果
{{#invoke:Example|hello}} "こんにちは世界"

モジュールの実行

モジュールは、#invokeパーサー関数を使用して通常のWikiページで実行されます。#invokeの構文はテンプレートの構文に似ていますが、いくつかの違いがあります。最も重要な違いは、関数名を指定する必要があることです関数は、入力値を受け取り、それらを処理して、出力値を返す一連の命令です。[1]これは、テンプレートの機能とよく似ています。引数を指定して処理し、結果を取得します。ただし、1つのLuaモジュールで多くの関数を定義できますが、1つのページで定義できるテンプレートは1つだけです。

さらに、Luaモジュールを直接実行することはできません。モジュールの機能の1つしか実行できません。モジュールは関数の単なるコンテナであり、それ自体では何もしません。したがって、関数名を入力する必要がある理由は2つあります。モジュールを単独で実行できないことと、関数名を指定しないと、Luaは実行する関数を認識できないことです。

Wikiページからモジュールを実行する最も簡単な方法は次のとおりです。

{{#invoke:モジュール名| 関数名}}

たとえば、この方法でModule:Example実行できます。これには、「hello」という名前の関数があります。

  • {{#invoke:Example|hello}} →HelloWorld!

引数の使用

引数は、テンプレートに渡されるのと同じ方法でモジュールに渡されます。ただし、最初のパイプ文字の後のテキストは常に関数名であることに注意してください。最初の位置引数は、2番目のパイプの後のテキストです。

{{#invoke:モジュール名| 関数名| 最初の位置引数| 2番目の位置引数| 名前付き引数=}}

ではモジュール:例、「hello_to」機能は、最初の位置引数に応じて、別の人に挨拶します。それはこのように動作します:

  • {{#invoke:Example|hello_to|Kate}} →こんにちは、ケイト!
  • {{#invoke:Example|hello_to|Fred}} →こんにちは、フレッド!

Module:Exampleの3番目の関数であるnamed has "count_fruit"は、named引数bananas使用してapples、バナナとリンゴの数をカウントします。次のように実行できます。

  • {{#invoke:Example|count_fruit|apples=3|bananas=4}} →バナナ4個とリンゴ3個
  • {{#invoke:Example|count_fruit|bananas=5|apples=2}} →バナナ5個とリンゴ2個

ほとんどのモジュールには、使用できる引数とその効果を説明するドキュメントページがあります。

スクリプトをリクエストする

ウィキペディアトーク:Luaアクセスして、ウィキペディアまたは別のウィキメディア財団プロジェクトで特定のタスクを実行するためのLuaスクリプトの作成に関するヘルプをリクエストしてください

歴史

ひどい歴史{{ qif }}、ParserFunctionsLua拡張機能、wikiスクリプト言語の議論(JavaScriptv。Lua)、mw:Extension:WikiScripts、TimはLuaの初期サポートを使用Scribunto作成します。

何年にもわたって議論されてきたLuaは、test2.wikipedia.orgテストするために、2012年にインストールされ、すべての編集者にLuaモジュールの開発を実験するよう公に招待されました。Luaは、mediawiki.orgとWikimediaテストウィキでテストした後、2013年2月に英語版ウィキペディアにインストールされました。

Luaについて

ウィキテキストテンプレートをLuaモジュールに変換する方法の基本的な例については、BradJorschの短いプレゼンテーションも参照してください

Luaは、関数またはオブジェクト指向プログラミングを使用して、データの分析、式の計算、および結果のフォーマットに使用できるスクリプト言語です。一部のLuaスクリプトは単純に保つことができますが、理解しやすいように、Luaでは、テーブル、動的関数、連想配列などの複雑な構造を使用できます。この場合、インデックスの添え字は単語とインデックス番号になります。 Luaは再ネストされた関数の再帰もサポートしているため、他のユーザーがLuaモジュールの保守方法を理解できないような過度の複雑さを回避するように注意する必要があります。上記の例で使用したモジュールのソースコードは次のとおりです。

ローカル p  =  {};      -ウィキペディアのすべてのluaモジュールは
                    、外部からアクセス可能な関数を保持
                    する変数を定義することから始める必要があります-このような変数には任意の名前を付けることができ
                    、-関数だけでなくさまざまなデータも含める
ことができます。p hello  =  function  frame       -「p」に関数を追加します。   
                                        -このような関数は、ウィキペディアで- 
                                        #invokeコマンドを使用して
                                        呼び出すことができます。-"frame"には、ウィキペディア
                                        が実行時にこの関数を
                                 送信するデータが含まれます-「こんにちは」はあなたが選んだ名前です。モジュールを使用するときは、同じ名前を参照する必要があります。
    
    local  str  =  "Hello World!"   -ローカル変数を宣言し、
                                -"Hello World!"と等しく設定します。  
    
    return  str-    これは、この関数を終了し、
                  -"str"の情報をウィキペディアに送り返すように指示します。
    
エンド  -関数の最後に「ハロー」
関数 P hello_to frame 		-別の関数
	local  name  =  frameを追加します。args [ 1 ]   -モジュールに渡された引数にアクセスするには、 `frame.args`を使用します
							    -`frame.args [1]`は最初の名前のないパラメータを参照します
							    -モジュールに与えられます
	return  "Hello、"  ..  name  ..  「!」  --`..`は文字列を連結します。これにより
									 、「Hello、Fred!」など、指定された名前に応じて
カスタマイズされた挨拶が返されます。終了
関数 p count_fruit frame 
	local  num_bananas  =  frame args バナナ -名前付き引数({{#invoke:Example | count_fruit | foo = bar}})も同様に
	ローカル num_apples  =  frameです。args リンゴ   -名によってインデックス付け`frame.args`によってアクセス(` frame.args [ "バナナ"] `、OR)
										   -等価` frame.args.bananas`。
	復帰 「私は持っている」 ..  num_bananas  ..  「バナナと」 ..  num_apples  ..  「りんご」
										   -生成するために一緒に文字列の束を連結し、同様に上記
										   -与えられた議論に基づく文。
終わり

return  p-    すべてのモジュールは、関数を含む変数をWikipediaに返すことで終了します。
-これで、{{#invoke:Example | こんにちは}}、
-{{#invoke:例| hello_to | foo}}、または{{#invoke:Example | count_fruit | bananas = 5 | apples = 6}} 
-呼び出しの最初の部分はモジュールのwikiページの名前で
あり、2番目の部分は
名前であることに注意してください。返された-変数に関連付けられている関数の1つ

-「印刷」機能はウィキペディアでは許可されていません。すべての出力は
、ウィキペディアに「返される」文字列を介して実行されます。

Luaのサンプルは、Luaソースコードの周りに配置されたタグ「<syntaxhighlightlang = "lua"> ... </ syntaxhighlight>」によって強調表示されます。Luaのより複雑な例を表示するには、記事「Lua(プログラミング言語)」を参照してください

MediaWiki(したがってウィキペディア)内でLuaを使用する方法については、mw:Extension:Scribunto / Luaリファレンスマニュアルを参照してください

ユニットテスト

ウィキペディアのLuaスクリプトには、いくつかの単体テストフレームワークがあります。これらにより、エディターは指定された入力セットを使用してモジュールを実行し、期待される出力が生成されることを確認できます。これらは、スクリプトへの変更が新しい(または古い)問題を引き起こすソフトウェアの戻りを迅速に検出するのに役立ちます。

慣例により、Module:Exampleのようなモジュールの単体テストModule:Example / testcasesに配置され、Module talk:Example / testcasesで実行されます

Module:ScribuntoUnitModule:UnitTestsは、よりよく使用されるテストフレームワークです。カテゴリ:テストツールのモジュールには、他にも興味深いレビューがいくつかあります。

ウィキペディア固有の機能

全体:Luaは、に渡されるテキスト文字列としてのみ入力を{{#invoke:}}取得でき、mw.title.new(...):getContent()およびframe:expandTemplate()を介して取得できます。frame:preprocess()が明示的に呼び出されない限り、Lua出力は前処理されません。つまり、出力内のテンプレート呼び出し、パーサー関数などは正しく機能しません。また、ページ内のすべてのLuaは10秒のCPU時間に制限されています(レンダリングされたページのソースコードを調べて、テンプレートまたはモジュールの解析にかかった時間を確認できます)。また、標準のLuaと比較して、ScribuntoのLuaにはあらゆる種類の機能がありません(mw:Extension:Scribunto / Luaリファレンスマニュアル§標準のLuaとの違いを参照)。

Lua入力の制限

ScribuntoのLuaコードは、ページが解析されているときにのみ実行されます。したがって、Luaが受け取ることができる唯一のユーザー入力は、ページ編集によるものです。入力した数値の平方根を計算するボックスを作成したり、クリックした親セットの部分に応じてマンデルブロ集合の一部を再計算したりすることはできません。オン。Luaが受け取ることができる入力には、ウィキペディアの転写可能なテキストページが含まれます。これには、グラフィックファイル(.SVGファイルも含まれませが、実際にはテキストですが、Wikiテキストページに切り取って貼り付けない限り)、カテゴリリストされているページのリスト、または変換できない特別なページのコンテンツは含まれません。

ウィキテキスト

トランスクルージョンされたウィキペディアのヘッダーには、「UNIQ5ae8f2aa414ff233-h-3--QINU」などの非表示のコードが含まれていることがよくあります。これらのコードを効果的に解析するには、削除する必要があります。

パイプトリック [[Wikipedia:Help| ]]使用するWikilinksは、出力として返される場合は機能しません[[Wikipedia:Help|Help]]明示的にとして記述する必要があります~~~~署名への置き換えなど、その他の保存前の変換も処理に失敗します。テンプレートのトランスクルージョン、パーサ関数呼び出し、変数の置換(すなわちでは何が{{...}})のようなタグを処理し、また意志されることはありません<ref><nowiki>

変換されたテンプレートのラベル付け

Luaを使用するすべてのテンプレートのドキュメントサブページに{{ lua }}テンプレートを配置してくださいLuaの使用法とテンプレートの変換をより適切に伝達するのに役立ちます。

も参照してください

ノート

  1. ^ 複数の出力値を持つこともできますが、これを行う関数は通常、wikiページからアクセスすることを意図していません。