Lua標準ライブラリ/基本ライブラリ

```
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
} )

```

拡張編集 0.90d3時点での内容は"Lua 5.1"です。

`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( ... ) )

```

エラーメッセージ`mes`を送出します

`level`はエラーメッセージに付加する位置情報を指定します

1なら`error`関数を呼び出した位置

2なら`error`関数を呼び出した関数を呼び出した位置

`level`が0か関数呼び出しの深度以上の場合、位置情報は付加されません

※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

```