広告

【Roblox開発】Luaの基本:グローバル関数リファレンス(a~n)

Roblox

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関数を呼んだ場所をエラー位置として示します。
2error関数を呼び出した関数を呼んだ場所をエラー位置として示します。
0:エラー位置情報を示しません。

getfenv

書式

table getfenv (Variant stack=1)

呼び出し元が使用している現在の環境(関数)を返します。

引数に関数名を渡すと、その関数の環境が返されます。

引数に整数値を渡すと、その指定した値の階層にある関数の環境を返します。

0:現在のスクリプトのグローバル環境を返す
1getfenvを呼び出す関数(ひとつ上の階層)の環境

サンプルコード

現在の環境を取得する
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を与えることで戻り値のにメタテーブルが追加されます。

next

書式

Variant, Variant next (table t, Variant lastKey = nil)

テーブル(配列)の最初のキーと値のペアを返します。テーブル内の各要素に対して繰り返し処理を行う場合や、next(t)などとすることで、テーブルが空かどうかを確認することができます。

テーブルを番号順(ソート順)に処理する場合はforipairsを使用します。

サンプルコード

field, value = next(t)

while field do
  print(field, "=", value)
  field, value = next(t, field)
end
タイトルとURLをコピーしました