Lua標準の関数および変数です。これらはLua 5.1.4に準拠していますが、Robloxではいくつかの動作の違いがあります。
Luaグローバル関数(a-n)
assert
書式
Variant assert (Variant value, string errorMessage="assertion failed!")
第1引数のvalue
の値がfalse
もしくはnil
の場合にエラーが発生します。
また、エラー発生時にエラーメッセージとして第2引数の文字列errorMessage
が返ります。第2引数が未指定の場合、デフォルト値のassertion failed!
がエラーメッセージとして表示されます。
第1引数の値がfalse
でもnil
でもない場合、渡されたすべての値が返されます。
サンプルコード
local product = 90 * 4
assert(product == 360, "掛け算に失敗しました!")
-- 上記の値は 90 * 4 = 360 で正しいため、何も起こりません。
collectgarbage関数
書式
Variant collectgarbage (string operation)
指定されたオプションに基づき、ガベージコレクションを実行します。Robloxではcount
オプションのみが使用可能となっています。標準のLuaには以下のオプションが存在します。
collect
:フルガベージコレクションサイクルを実行する。stop
:ガベージコレクタを停止する。restart
:ガベージコレクタを再開する。count
:使用中のメモリの合計を返す。step
:ガベージコレクションステップひとつを実行する。steppause
:コレクタの停止値をarg÷100に設定する。setstepmul
:コレクタのステップ係数値をarg÷100に設定する。
error
書式
void error (string message, int level=1)
最後に呼び出された関数を終了し、第1引数に渡された文字列message
をエラーメッセージとして出力します。関数がpcall(保護関数)で呼び出されていない場合、その関数を呼び出したスクリプトは終了します。エラー関数自体が戻ることはなく、スクリプトエラーのように機能します。
第2引数にはエラー取得の方法を指定します。
1
(デフォルト値):error
関数を呼んだ場所をエラー位置として示します。2
:error
関数を呼び出した関数を呼んだ場所をエラー位置として示します。0
:エラー位置情報を示しません。
getfenv
書式
table getfenv (Variant stack=1)
呼び出し元が使用している現在の環境(関数)を返します。
引数に関数名を渡すと、その関数の環境が返されます。
引数に整数値を渡すと、その指定した値の階層にある関数の環境を返します。
0
:現在のスクリプトのグローバル環境を返す1
:getfenv
を呼び出す関数(ひとつ上の階層)の環境
サンプルコード
現在の環境を取得する
myVariable = "Hello, environments" -- グローバル変数を指定
local env = getfenv()
print(env["myVariable"]) --> Hello, environments
関数の環境を取得する
function printMessage()
print(i + j)
end
local env = getfenv(printMessage)
env.i = 10
env.j = 5
printMessage() --> 15
スタック(第2引数の整数値)に基づく環境の取得
function whatIsThePassword()
local env = getfenv(1) -- 環境の階層をひとつ上げる。もしくはこの関数の呼び出し元を参照する。
print(env.password) -- 呼び出し元関数のローカル変数passwordの値を表示する。
print(password) --> 環境内にないpassword変数 = nil
end
function openSesame()
local password = "secret" -- ローカル変数
whatIsThePassword()
end
openSesame()
getmetatable
書式
Variant getmetatable (Variant t)
メタテーブルを取得します。引数t
にメタテーブルがある場合はメタテーブルを返し、無い場合はnil
を返します。
また、t
がメタテーブルを持ち、__metatable
でメタメソッドがセットされている場合、それに関連付けられた値が返ります。
サンプルコード
-- getmetatableの例
local meta = {}
local t = setmetatable({}, meta)
print(getmetatable(t) == meta) --> true
meta.__metatable = "protected"
print(getmetatable(t)) --> protected
ipairs
書式
function, array, int ipairs (array t)
for
構文で、キーと値のペアおよび反復処理のためのイテレータ関数を返します。
一般的なfor
構文で以下のようにipair
関数による戻り値を利用することで、テーブル(配列)の各要素に対する繰り返し処理を実施することができます。
for i,v in ipairs(t) do
-- ブロック
end
サンプルコード
local fruits = {"apples", "orangs", "kiwi"}
for index, fruit in ipairs(fruits) do
print(index, fruit) --> 1 applies, 2 oranges, 3 kiwi, etc...
end
loadstring
書式
Variant loadstring (string contents)
文字列からLuaコードを読み取り、関数として返します。Robloxではloadstring
関数は標準で無効となっています。設定で有効化することができますが、非推奨です。
Robloxでloadstring関数を有効化する
Explorerツリーから [ServerScriptService] へ移動し、[Behavior] にあるLoadStringEnabled
チェックボックスをオンにすることでloadstring
関数が有効になります。
サンプルコード
local str = "i = 5; j = 10; return i + j"
local x = assert(loadstring(str))()
print(x)
newproxy
書式
userdata newproxy (bool addMetatable = false)
ブランクのuserdata
を作成します。引数にtrue
を与えることで戻り値のc
にメタテーブルが追加されます。
next
書式
Variant, Variant next (table t, Variant lastKey = nil)
テーブル(配列)の最初のキーと値のペアを返します。テーブル内の各要素に対して繰り返し処理を行う場合や、next(t)
などとすることで、テーブルが空かどうかを確認することができます。
テーブルを番号順(ソート順)に処理する場合はfor
、ipairs
を使用します。
サンプルコード
field, value = next(t)
while field do
print(field, "=", value)
field, value = next(t, field)
end