OCR & Aviutl Wiki
Advertisement


基本ライブラリ[]

_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のバージョンを示す文字列です。

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

assert[]

assert(v[, mes])

vnil か 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はその関数を呼び出す関数の環境を返します。値がスタック内の関数呼び出しの数よりも大きい場合、またはターゲットのスタックレベルが末尾呼び出しで返された場合は、エラーが発生します。
  • 関数を渡すと、その関数が呼び出されたときに使用される環境が返されます。

Wikiすべての標準ライブラリ関数とScribuntoライブラリ関数によって使用される環境は保護されています。getfenvを使ってこれらの環境にアクセスしようとすると、代わりにnilが返されます。

getmetatable[]

getmetatable(t)

tメタテーブルを返します
tのメタテーブルが__metatableメソッドを持ってたら、その値を返します
nilを返す事もあります

Wikiセキュリティの事情でテーブル型以外の値にメタテーブルを設定できないためテーブル型以外では返せません。

ipairs[]

ipairs(t)

イテレータ関数、t、0の3つの値を返します。

for i, v in ipairs( t ) do
    -- block
end

上のコードは 1 から連続する t の正の整数のインデックスの要素すべてに対して処理を行います
iはインデックス、vはその値です

Wikieメタテーブル__ipairsメソッドを持っていたら、そちらを呼び出します

next[]

next(t[, i])

テーブルtの要素iの次の要素の名前と値を返します
iがnilもしくは未定義の値ならtの最初の要素の名前と値を返します
最後のインデックスで呼び出すか、空のテーブルに対してnilで呼び出すと、nextはnilを返す。 二番目の引数が省略された場合はnilと解釈される。 特に、next( t ) == nilを使うとテーブルが空かどうか調べることができる。

Luaにはフィールドの宣言がない。テーブル内にフィールドが存在しないのと、nil値が格納されたフィールドには、何の違いも無い。ゆえに、nextnilでない値を持つフィールドのみを考慮する。インデックスが列挙される順番は、数値のインデックスに対しても、不定である (数値順にテーブルを巡回するには、数値用のfor文ipairs関数を使う)。

テーブルの巡回中に、もし存在していないフィールドに新たに値が割り当てられたら、nextの動作は未定義である。しかし既存のフィールドは変更してもよい。特に、既存のフィールドを消去するのは構わない。

pairs[]

pairs(t)

next関数、tnilの3つの値を返します

for k, v in pairs( t ) do
    -- block
end

上のコードはtの要素すべてに対して処理を行います
 k は要素名、v はその値です

巡回中にテーブルを変更する際の注意はnextを参照。

Wikieメタテーブル__pairsメソッドを持っていたら、そちらを呼び出します

pcall[]

pcall(f,[ ...]) 関数fに指定された引数を(protected modeで)渡して実行します。
関数f内でエラーが発生してもプログラムを中断せずに、falseとエラーコードを返します。
成功時はtrueと関数fの戻り値を返します。

Wiki特定の内部エラーを傍受することはできません。

関数の実行中にエラーが発生した場合、通常は呼び出し元までエラーが伝搬し、そこで実行を止めてしまう。しかし、アプリケーション組み込みのスクリプトでは特に、エラーが発生しても止まってほしくないことがある。そこで、単に関数を呼び出す代わりに 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メタテーブルを設定します
もしmetanilであれば、テーブルtのメタテーブルは除去される。 元のメタテーブルが__metatableフィールドを持っていると、エラーになる。

Aviutlテーブル型以外の値にメタテーブルを設定するには、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"
Aviutl"thread"
Aviutl"userdata"

unpack[]

unpack(t[, i[, j]]

テーブルtの、i以上j以下の整数の要素すべてを返します
nilもしくは省略した時、iは 1、j#tの値になります

tシーケンスではなく、jnilまたは未指定の場合、結果は確定的ではありません。詳細は長さ演算子を見てください。

※Lua 5.2からはテーブルライブラリになり、table.unpackとなります

xpcall[]

xpcall(f, err) 関数 f を実行し、エラーが発生したらエラーメッセージを引数に関数 err を実行します。
関数 f 成功時は true と関数 f の戻り値を返します。
失敗時はfalseと関数errの戻り値を返します。

Wiki特定の内部エラーを傍受することはできません。

擬似コードでは、xpcallは次のようになります:

function xpcall( f, errhandler )
    try
        return true, f()
    catch ( message )
        message = errhandler( message )
        return false, message
    end
end
Advertisement