基本ライブラリ[]
_G[]
グローバル変数を全て含むテーブルです。_G自身も含まれます。
foo = 1
mw.log( foo ) -- logs "1"
_G.foo = 2
mw.log( foo ) -- logs "2"
_G = {} -- _Gの中に_Gを作成した事になるが・・・
_G.foo = 3
mw.log( foo ) -- 表示されるのは"2"のまま
_G自身をテーブルとして使用する例です。
-- Call a function whose name is stored in a variable
_G[var]()
-- Log the names and stringified values of all global variables
for k, v in pairs( _G ) do
mw.log( k, v )
end
-- Log the creation of new global variables
setmetatable( _G, {
__newindex = function ( t, k, v )
mw.log( "Creation of new global variable '" .. k .. "'" )
rawset( t, k, v )
end
} )
_VERSION[]
Luaのバージョンを示す文字列です。
拡張編集 0.90d3時点での内容は"Lua 5.1"です。
assert[]
assert(v[, mes])
v
が nil
か false だった時、エラーメッセージmes
を送出します
mes
省略時のエラーメッセージは "assertion failed!" になります
- もしそうでなかった場合、そこに記述された引数をそのまま返します。中に関数を記述した場合、その返す値で
assert
を実行します。
-- This doesn't check for errors
local result1, result2, etc = func( ... )
-- This works the same, but does check for errors
local result1, result2, etc = assert( func( ... ) )
error[]
error(mes[, level])
エラーメッセージmes
を送出します
level
はエラーメッセージに付加する位置情報を指定します
1ならerror
関数を呼び出した位置
2ならerror
関数を呼び出した関数を呼び出した位置
level
が0か関数呼び出しの深度以上の場合、位置情報は付加されません
getfenv[]
getfenv(f)
※Lua 5.2では削除されます。エンジン設定のallowEnvFuncs
によって異なります。
指定された関数の現在の環境を返します。f
にはLuaの関数かスタックレベルを指定します。
- 1、nil、または省略された場合、
getfenv
を呼び出す関数の環境を返します。多くの場合、これは_G
と同じになります。 - 整数2〜10は、呼び出しスタックの上位にある関数の環境を返します。たとえば、2は現在の関数を呼び出した関数の環境を返し、3はその関数を呼び出す関数の環境を返します。値がスタック内の関数呼び出しの数よりも大きい場合、またはターゲットのスタックレベルが末尾呼び出しで返された場合は、エラーが発生します。
- 関数を渡すと、その関数が呼び出されたときに使用される環境が返されます。
すべての標準ライブラリ関数とScribuntoライブラリ関数によって使用される環境は保護されています。
getfenv
を使ってこれらの環境にアクセスしようとすると、代わりにnilが返されます。
getmetatable[]
getmetatable(t)
t
のメタテーブルを返します
t
のメタテーブルが__metatable
メソッドを持ってたら、その値を返します
nilを返す事もあります
セキュリティの事情でテーブル型以外の値にメタテーブルを設定できないためテーブル型以外では返せません。
ipairs[]
ipairs(t)
イテレータ関数、t
、0の3つの値を返します。
for i, v in ipairs( t ) do
-- block
end
上のコードは 1 から連続する t の正の整数のインデックスの要素すべてに対して処理を行います
iはインデックス、vはその値です
e
のメタテーブルが__ipairs
メソッドを持っていたら、そちらを呼び出します
next[]
next(t[, i])
テーブルt
の要素i
の次の要素の名前と値を返します
i
がnilもしくは未定義の値ならt
の最初の要素の名前と値を返します
最後のインデックスで呼び出すか、空のテーブルに対してnil
で呼び出すと、nextはnil
を返す。 二番目の引数が省略された場合はnil
と解釈される。 特に、next( t ) == nil
を使うとテーブルが空かどうか調べることができる。
Luaにはフィールドの宣言がない。テーブル内にフィールドが存在しないのと、nil
値が格納されたフィールドには、何の違いも無い。ゆえに、next
はnil
でない値を持つフィールドのみを考慮する。インデックスが列挙される順番は、数値のインデックスに対しても、不定である (数値順にテーブルを巡回するには、数値用のfor文やipairs関数を使う)。
テーブルの巡回中に、もし存在していないフィールドに新たに値が割り当てられたら、next
の動作は未定義である。しかし既存のフィールドは変更してもよい。特に、既存のフィールドを消去するのは構わない。
pairs[]
pairs(t)
next
関数、t
、nil
の3つの値を返します
for k, v in pairs( t ) do
-- block
end
上のコードはtの要素すべてに対して処理を行います
k は要素名、v はその値です
- 巡回中にテーブルを変更する際の注意は
next
を参照。
e
のメタテーブルが__pairs
メソッドを持っていたら、そちらを呼び出します
pcall[]
pcall(f,[ ...])
関数f
に指定された引数を(protected modeで)渡して実行します。
関数f
内でエラーが発生してもプログラムを中断せずに、falseとエラーコードを返します。
成功時はtrueと関数f
の戻り値を返します。
特定の内部エラーを傍受することはできません。
関数の実行中にエラーが発生した場合、通常は呼び出し元までエラーが伝搬し、そこで実行を止めてしまう。しかし、アプリケーション組み込みのスクリプトでは特に、エラーが発生しても止まってほしくないことがある。そこで、単に関数を呼び出す代わりに pcall() という関数を使って関数を呼び出す。
擬似コードでは、pcall
は次のようになります:
function pcall( f, ... )
try
return true, f( ... )
catch ( message )
return false, message
end
end
rawequal[]
rawequal(a, b)
__eq
メタメソッドを呼ばずにaとbが等しいか調べます。戻り値はブーリアンです
rawget[]
rawget(t, i)
__index
メタメソッドを呼ばずに t[i] の値を取得します。t はテーブルでなければなりません
rawset[]
rawset(t, i, v)
__newindex
メタメソッドを呼ばずに t[i] に v を代入します。t はテーブルでなければなりません
select[]
select(i, ...)
i
が整数なら[i+1]
番目以降の引数の値を全て返します
i
が文字列'#'
ならi
を除く引数の数を返します
言い換えれば、select
は...
にnil値が含まれていても正しく動作することを除けば、ほぼ次のようなものです(nil
の問題については #
とunpack
の項目をご覧ください)
function select( index, ... )
local t = { ... }
if index == '#' then
return #t
else
return unpack( t, index )
end
end
負の値を指定することも可能で、その場合末尾からの位置になります。
local secondToLast, last = select(2, "one", "two", "three", "four")
mw.log(secondToLast) --> "two"
mw.log(last) --> "three"
local secondToLast, last = select(-2, "one", "two", "three", "four")
mw.log(secondToLast) --> "three"
mw.log(last) --> "four"
setmetatable[]
setmetatable(t, meta)
テーブルt
のメタテーブルを設定します
もしmeta
がnil
であれば、テーブルt
のメタテーブルは除去される。 元のメタテーブルが__metatable
フィールドを持っていると、エラーになる。
テーブル型以外の値にメタテーブルを設定するには、C言語側で処理する必要があります
tonumber[]
tonumber(e[, base])
e
が数値か、数値に変換可能な文字列なら数値を、それ以外ならnil
を返します
base(省略時:10)
にはe
を変換する際に使う基数を 2~36 の範囲で指定します
基数10では値は小数部を持ったり、E表記で表されたり、基数16ではそれを示すために先行 "0x"を持つ可能性があります。他の基数では、符号なし整数のみが受け入れられます。
tostring[]
tostring(e)
e
を文字列に変換します
それぞれの型がどのように変換されるかについての詳細はLuaのデータ型を見てください。
e
のメタテーブルが__tostring
メソッドを持っていたら、そちらを呼び出します
type[]
type(v)
v
の型を文字列で返します。返される文字列は以下のどれかです
"nil"
"number"
"string"
"boolean"
"table"
"function"
"thread"
"userdata"
unpack[]
unpack(t[, i[, j]]
テーブルt
の、i
以上j
以下の整数の要素すべてを返します
nil
もしくは省略した時、i
は 1、j
は#t
の値になります
t
がシーケンスではなく、j
がnil
または未指定の場合、結果は確定的ではありません。詳細は長さ演算子を見てください。
※Lua 5.2からはテーブルライブラリになり、table.unpack
となります
xpcall[]
xpcall(f, err)
関数 f を実行し、エラーが発生したらエラーメッセージを引数に関数 err を実行します。
関数 f 成功時は true と関数 f の戻り値を返します。
失敗時はfalseと関数err
の戻り値を返します。
特定の内部エラーを傍受することはできません。
擬似コードでは、xpcall
は次のようになります:
function xpcall( f, errhandler )
try
return true, f()
catch ( message )
message = errhandler( message )
return false, message
end
end