2023-05-24 21:49:41更新でのソースとプレビューを表示しています。
<h2>Lua標準ライブラリ/基本ライブラリ</h2><div><h3>上</h3><div><a href='/ocraviutl/name/Lua%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA'>Lua標準ライブラリ</a></div></div><div class='uk-overflow-container'><table class='uk-table'> 順序 <tr><th>次</th></tr><tr><td>数学ライブラリ</td></tr></table></div><p><br></p><div><div><h2 id='mw-toc-heading'>目次</h2></div><ul><li><a href='#%E5%9F%BA%E6%9C%AC%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA'>1 基本ライブラリ</a><ul><li><a href='#G'>1.1 _G</a></li><li><a href='#VERSION'>1.2 _VERSION</a></li><li><a href='#assert'>1.3 assert</a></li><li><a href='#error'>1.4 error</a></li><li><a href='#getfenv'>1.5 getfenv</a></li><li><a href='#getmetatable'>1.6 getmetatable</a></li><li><a href='#ipairs'>1.7 ipairs</a></li><li><a href='#next'>1.8 next</a></li><li><a href='#pairs'>1.9 pairs</a></li><li><a href='#pcall'>1.10 pcall</a></li><li><a href='#rawequal'>1.11 rawequal</a></li><li><a href='#rawget'>1.12 rawget</a></li><li><a href='#rawset'>1.13 rawset</a></li><li><a href='#select'>1.14 select</a></li><li><a href='#setmetatable'>1.15 setmetatable</a></li><li><a href='#tonumber'>1.16 tonumber</a></li><li><a href='#tostring'>1.17 tostring</a></li><li><a href='#type'>1.18 type</a></li><li><a href='#unpack'>1.19 unpack</a></li><li><a href='#xpcall'>1.20 xpcall</a></li></ul></li></ul></div><h2>基本ライブラリ[]</h2><h3>_G[]</h3><p>グローバル変数を全て含むテーブルです。_G自身も含まれます。</p><div>foo = 1mw.log( foo ) -- logs "1"_G.foo = 2mw.log( foo ) -- logs "2"_G = {} -- _Gの中に_Gを作成した事になるが・・・_G.foo = 3mw.log( foo ) -- 表示されるのは"2"のまま</div><p>_G自身をテーブルとして使用する例です。</p><div>-- Call a function whose name is stored in a variable_G[var]()</div><div>-- Log the names and stringified values of all global variablesfor k, v in pairs( _G ) do mw.log( k, v )end</div><div>-- Log the creation of new global variablessetmetatable( _G, { __newindex = function ( t, k, v ) mw.log( "Creation of new global variable '" .. k .. "'" ) rawset( t, k, v ) end} )</div><h3>_VERSION[]</h3><p>Luaのバージョンを示す文字列です。</p>Aviutl拡張編集 0.90d3時点での内容は"Lua 5.1"です。<h3>assert[]</h3><p>assert(v[, mes])</p><p>v が nil か false だった時、エラーメッセージmesを送出します<br>mes省略時のエラーメッセージは "assertion failed!" になります</p>もしそうでなかった場合、そこに記述された引数をそのまま返します。中に関数を記述した場合、その返す値でassertを実行します。<div>-- This doesn't check for errorslocal result1, result2, etc = func( ... )-- This works the same, but does check for errorslocal result1, result2, etc = assert( func( ... ) )</div><h3>error[]</h3><p>error(mes[, level])</p><p>エラーメッセージmesを送出します</p><p>levelはエラーメッセージに付加する位置情報を指定します<br>1ならerror関数を呼び出した位置<br>2ならerror関数を呼び出した関数を呼び出した位置<br>levelが0か関数呼び出しの深度以上の場合、位置情報は付加されません</p><h3>getfenv[]</h3><p>getfenv(f)</p><p>※Lua 5.2では削除されます。エンジン設定のallowEnvFuncsによって異なります。</p><p>指定された関数の現在の環境を返します。fにはLuaの関数かスタックレベルを指定します。</p><ul><li>1、nil、または省略された場合、getfenvを呼び出す関数の環境を返します。多くの場合、これは<a href='#_G'>_G</a>と同じになります。</li><li>整数2〜10は、呼び出しスタックの上位にある関数の環境を返します。たとえば、2は現在の関数を呼び出した関数の環境を返し、3はその関数を呼び出す関数の環境を返します。値がスタック内の関数呼び出しの数よりも大きい場合、またはターゲットのスタックレベルが末尾呼び出しで返された場合は、エラーが発生します。</li><li>関数を渡すと、その関数が呼び出されたときに使用される環境が返されます。</li></ul><p>すべての標準ライブラリ関数とScribuntoライブラリ関数によって使用される環境は保護されています。getfenvを使ってこれらの環境にアクセスしようとすると、代わりにnilが返されます。</p><h3>getmetatable[]</h3><p>getmetatable(t)</p><p>tのメタテーブルを返します<br>tのメタテーブルが__metatableメソッドを持ってたら、その値を返します<br>nilを返す事もあります</p>Wikiセキュリティの事情でテーブル型以外の値にメタテーブルを設定できないためテーブル型以外では返せません。<h3>ipairs[]</h3><p>ipairs(t)</p><p>イテレータ関数、t、0の3つの値を返します。</p><div>for i, v in ipairs( t ) do -- blockend</div><p>上のコードは 1 から連続する t の正の整数のインデックスの要素すべてに対して処理を行いますiはインデックス、vはその値です</p><p>eのメタテーブルが__ipairsメソッドを持っていたら、そちらを呼び出します</p><h3>next[]</h3><p>next(t[, i])</p><p>テーブルtの要素iの次の要素の名前と値を返します<br>iがnilもしくは未定義の値ならtの最初の要素の名前と値を返します<br>最後のインデックスで呼び出すか、空のテーブルに対してnilで呼び出すと、nextはnilを返す。 二番目の引数が省略された場合はnilと解釈される。 特に、next( t ) == nilを使うとテーブルが空かどうか調べることができる。</p><p>Luaにはフィールドの宣言がない。テーブル内にフィールドが存在しないのと、nil値が格納されたフィールドには、何の違いも無い。ゆえに、nextはnilでない値を持つフィールドのみを考慮する。インデックスが列挙される順番は、数値のインデックスに対しても、不定である (数値順にテーブルを巡回するには、数値用のfor文や<a href='#ipairs'>ipairs</a>関数を使う)。</p><p>テーブルの巡回中に、もし存在していないフィールドに新たに値が割り当てられたら、nextの動作は未定義である。しかし既存のフィールドは変更してもよい。特に、既存のフィールドを消去するのは構わない。</p><h3>pairs[]</h3><p>pairs(t)</p><p><a href='#next'>next</a>関数、t、nilの3つの値を返します<br></p><div>for k, v in pairs( t ) do -- blockend</div><p>上のコードはtの要素すべてに対して処理を行います k は要素名、v はその値です</p>巡回中にテーブルを変更する際の注意は<a href='#next'>next</a>を参照。<p>Wiki.pngeのメタテーブルが__pairsメソッドを持っていたら、そちらを呼び出します</p><h3>pcall[]</h3><p>pcall(f,[ ...])関数fに指定された引数を(protected modeで)渡して実行します。<br>関数f内でエラーが発生してもプログラムを中断せずに、falseとエラーコードを返します。<br>成功時はtrueと関数fの戻り値を返します。</p>特定の内部エラーを傍受することはできません。<p>関数の実行中にエラーが発生した場合、通常は呼び出し元までエラーが伝搬し、そこで実行を止めてしまう。しかし、アプリケーション組み込みのスクリプトでは特に、エラーが発生しても止まってほしくないことがある。そこで、単に関数を呼び出す代わりに pcall() という関数を使って関数を呼び出す。</p><p>擬似コードでは、pcallは次のようになります:</p><div>function pcall( f, ... ) try return true, f( ... ) catch ( message ) return false, message endend</div><h3>rawequal[]</h3><p>rawequal(a, b)</p><p>__eqメタメソッドを呼ばずにaとbが等しいか調べます。戻り値はブーリアンです</p><h3>rawget[]</h3><p>rawget(t, i)</p><p>__indexメタメソッドを呼ばずに t[i] の値を取得します。t はテーブルでなければなりません</p><h3>rawset[]</h3><p>rawset(t, i, v)</p><p>__newindexメタメソッドを呼ばずに t[i] に v を代入します。t はテーブルでなければなりません</p><h3>select[]</h3><p>select(i, ...)</p><p>iが整数なら[i+1]番目以降の引数の値を全て返しますiが文字列'#'ならiを除く引数の数を返します</p><p>言い換えれば、selectは...にnil値が含まれていても正しく動作することを除けば、ほぼ次のようなものです(nilの問題については <a href='/ocraviutl/name/Lua%E3%81%AE%E6%BC%94%E7%AE%97%E5%AD%90#%E9%95%B7%E3%81%95%E6%BC%94%E7%AE%97%E5%AD%90'>#</a>と<a href='#unpack'>unpack</a>の項目をご覧ください)</p><div>function select( index, ... ) local t = { ... } if index == '#' then return #t else return unpack( t, index ) endend</div><p>負の値を指定することも可能で、その場合末尾からの位置になります。</p><div><div><ul><li><div><a href='#'>+</a></div></li><li><div><a href='#'>-</a></div></li></ul></div><div><p></p><div>local secondToLast, last = select(2, "one", "two", "three", "four")mw.log(secondToLast) --> "two"mw.log(last) --> "three"</div><p></p></div><div><p></p><div>local secondToLast, last = select(-2, "one", "two", "three", "four")mw.log(secondToLast) --> "three"mw.log(last) --> "four"</div><p></p></div></div><h3>setmetatable[]</h3><p>setmetatable(t, meta)</p><p>テーブルtのメタテーブルを設定します<br>もしmetaがnilであれば、テーブルtのメタテーブルは除去される。 元のメタテーブルが__metatableフィールドを持っていると、エラーになる。</p>Aviutl.pngテーブル型以外の値にメタテーブルを設定するには、C言語側で処理する必要があります<h3>tonumber[]</h3><p>tonumber(e[, base])</p><p>eが数値か、数値に変換可能な文字列なら数値を、それ以外ならnilを返します<br>base(省略時:10)にはeを変換する際に使う基数を 2~36 の範囲で指定します</p><p>基数10では値は小数部を持ったり、E表記で表されたり、基数16ではそれを示すために先行 "0x"を持つ可能性があります。他の基数では、符号なし整数のみが受け入れられます。</p><h3>tostring[]</h3><p>tostring(e)</p><p>eを文字列に変換します<br>それぞれの型がどのように変換されるかについての詳細は<a href='/ocraviutl/name/Lua%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B'>Luaのデータ型</a>を見てください。</p><p>eのメタテーブルが__tostringメソッドを持っていたら、そちらを呼び出します</p><h3>type[]</h3><p>type(v)</p><p>vの型を文字列で返します。返される文字列は以下のどれかです</p>"nil""number""string""boolean""table""function""thread"Aviutl.png"userdata"<h3>unpack[]</h3><p>unpack(t[, i[, j]]</p><p>テーブルtの、i以上j以下の整数の要素すべてを返します<br>nilもしくは省略した時、iは 1、jは<a href='/ocraviutl/name/Lua%E3%81%AE%E6%BC%94%E7%AE%97%E5%AD%90#%E9%95%B7%E3%81%95%E6%BC%94%E7%AE%97%E5%AD%90'>#t</a>の値になります</p><p>tがシーケンスではなく、jがnilまたは未指定の場合、結果は確定的ではありません。詳細は<a href='/ocraviutl/name/Lua%E3%81%AE%E6%BC%94%E7%AE%97%E5%AD%90#%E9%95%B7%E3%81%95%E6%BC%94%E7%AE%97%E5%AD%90'>長さ演算子</a>を見てください。</p><p>※Lua 5.2からはテーブルライブラリになり、table.unpackとなります</p><h3>xpcall[]</h3><p>xpcall(f, err)関数 f を実行し、エラーが発生したらエラーメッセージを引数に関数 err を実行します。<br><a href='#pcall'>関数 f 成功時は true と関数 f の戻り値を返します。</a><br>失敗時はfalseと関数errの戻り値を返します。</p>特定の内部エラーを傍受することはできません。<p>擬似コードでは、xpcallは次のようになります:</p><div>function xpcall( f, errhandler ) try return true, f() catch ( message ) message = errhandler( message ) return false, message endend</div>
<br>
この記事は、CC BY-SAのもとで公表された<a href="https://ocraviutl.fandom.com/ja/wiki/Lua%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/%E5%9F%BA%E6%9C%AC%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA">「Lua標準ライブラリ/基本ライブラリ」</a>を改変し作成しました。特に記載されていない限り、CC BY-SAのもとで利用可能です。}
| 次 |
|---|
| 数学ライブラリ |
グローバル変数を全て含むテーブルです。_G自身も含まれます。
_G自身をテーブルとして使用する例です。
Luaのバージョンを示す文字列です。
Aviutl拡張編集 0.90d3時点での内容は"Lua 5.1"です。assert(v[, mes])
v が nil か false だった時、エラーメッセージmesを送出します
mes省略時のエラーメッセージは "assertion failed!" になります
error(mes[, level])
エラーメッセージmesを送出します
levelはエラーメッセージに付加する位置情報を指定します
1ならerror関数を呼び出した位置
2ならerror関数を呼び出した関数を呼び出した位置
levelが0か関数呼び出しの深度以上の場合、位置情報は付加されません
getfenv(f)
※Lua 5.2では削除されます。エンジン設定のallowEnvFuncsによって異なります。
指定された関数の現在の環境を返します。fにはLuaの関数かスタックレベルを指定します。
すべての標準ライブラリ関数とScribuntoライブラリ関数によって使用される環境は保護されています。getfenvを使ってこれらの環境にアクセスしようとすると、代わりにnilが返されます。
getmetatable(t)
tのメタテーブルを返します
tのメタテーブルが__metatableメソッドを持ってたら、その値を返します
nilを返す事もあります
ipairs(t)
イテレータ関数、t、0の3つの値を返します。
上のコードは 1 から連続する t の正の整数のインデックスの要素すべてに対して処理を行いますiはインデックス、vはその値です
eのメタテーブルが__ipairsメソッドを持っていたら、そちらを呼び出します
next(t[, i])
テーブルtの要素iの次の要素の名前と値を返します
iがnilもしくは未定義の値ならtの最初の要素の名前と値を返します
最後のインデックスで呼び出すか、空のテーブルに対してnilで呼び出すと、nextはnilを返す。 二番目の引数が省略された場合はnilと解釈される。 特に、next( t ) == nilを使うとテーブルが空かどうか調べることができる。
Luaにはフィールドの宣言がない。テーブル内にフィールドが存在しないのと、nil値が格納されたフィールドには、何の違いも無い。ゆえに、nextはnilでない値を持つフィールドのみを考慮する。インデックスが列挙される順番は、数値のインデックスに対しても、不定である (数値順にテーブルを巡回するには、数値用のfor文やipairs関数を使う)。
テーブルの巡回中に、もし存在していないフィールドに新たに値が割り当てられたら、nextの動作は未定義である。しかし既存のフィールドは変更してもよい。特に、既存のフィールドを消去するのは構わない。
pairs(t)
next関数、t、nilの3つの値を返します
上のコードはtの要素すべてに対して処理を行います k は要素名、v はその値です
巡回中にテーブルを変更する際の注意はnextを参照。Wiki.pngeのメタテーブルが__pairsメソッドを持っていたら、そちらを呼び出します
pcall(f,[ ...])関数fに指定された引数を(protected modeで)渡して実行します。
関数f内でエラーが発生してもプログラムを中断せずに、falseとエラーコードを返します。
成功時はtrueと関数fの戻り値を返します。
関数の実行中にエラーが発生した場合、通常は呼び出し元までエラーが伝搬し、そこで実行を止めてしまう。しかし、アプリケーション組み込みのスクリプトでは特に、エラーが発生しても止まってほしくないことがある。そこで、単に関数を呼び出す代わりに pcall() という関数を使って関数を呼び出す。
擬似コードでは、pcallは次のようになります:
rawequal(a, b)
__eqメタメソッドを呼ばずにaとbが等しいか調べます。戻り値はブーリアンです
rawget(t, i)
__indexメタメソッドを呼ばずに t[i] の値を取得します。t はテーブルでなければなりません
rawset(t, i, v)
__newindexメタメソッドを呼ばずに t[i] に v を代入します。t はテーブルでなければなりません
select(i, ...)
iが整数なら[i+1]番目以降の引数の値を全て返しますiが文字列'#'ならiを除く引数の数を返します
言い換えれば、selectは...にnil値が含まれていても正しく動作することを除けば、ほぼ次のようなものです(nilの問題については #とunpackの項目をご覧ください)
負の値を指定することも可能で、その場合末尾からの位置になります。
setmetatable(t, meta)
テーブルtのメタテーブルを設定します
もしmetaがnilであれば、テーブルtのメタテーブルは除去される。 元のメタテーブルが__metatableフィールドを持っていると、エラーになる。
tonumber(e[, base])
eが数値か、数値に変換可能な文字列なら数値を、それ以外ならnilを返します
base(省略時:10)にはeを変換する際に使う基数を 2~36 の範囲で指定します
基数10では値は小数部を持ったり、E表記で表されたり、基数16ではそれを示すために先行 "0x"を持つ可能性があります。他の基数では、符号なし整数のみが受け入れられます。
tostring(e)
eを文字列に変換します
それぞれの型がどのように変換されるかについての詳細はLuaのデータ型を見てください。
eのメタテーブルが__tostringメソッドを持っていたら、そちらを呼び出します
type(v)
vの型を文字列で返します。返される文字列は以下のどれかです
"nil""number""string""boolean""table""function""thread"Aviutl.png"userdata"unpack(t[, i[, j]]
テーブルtの、i以上j以下の整数の要素すべてを返します
nilもしくは省略した時、iは 1、jは#tの値になります
tがシーケンスではなく、jがnilまたは未指定の場合、結果は確定的ではありません。詳細は長さ演算子を見てください。
※Lua 5.2からはテーブルライブラリになり、table.unpackとなります
xpcall(f, err)関数 f を実行し、エラーが発生したらエラーメッセージを引数に関数 err を実行します。
関数 f 成功時は true と関数 f の戻り値を返します。
失敗時はfalseと関数errの戻り値を返します。
擬似コードでは、xpcallは次のようになります: