Lua 配列(テーブル)にキーが存在しないとき(__indexメタメソッド)

目次

確認環境:Windows10 64bit

 

テーブルにキーが存在しないときメッセージを返す

__index は テーブル内に存在しないキーが参照されたときに代わりに使用されるメソッドです。

color1 = {a = "red"}

table1 = {
    __index = function(table, key)
        return "'" .. key .. "' does not exist"
    end
}

setmetatable(color1,table1)

print(color1.a)  -- red
print(color1.b)  -- 'b' does not exist

__index はキーを引数として受け取り、カスタムのエラーメッセージを返します。

 

テーブルにキーが存在しないとき別のテーブルの値を返す

defaults = {x = 10, y = 20}

color1 = {}
setmetatable(color1, {__index = defaults})

print(color1.x)  -- 10 (defaults から取得)
print(color1.y)  -- 20 (defaults から取得)
print(color1.z)  -- nil (defaults にもない)

3行目のcolor1は、中身が空です。
4行目は、__indexでcolors1テーブルが空のときdefaultsを参照します。

6行目は、colors1は空ですが、defaultsのxの10を表示します。
7行目は、colors1は空ですが、defaultsのyの20を表示します。
8行目は、colors1は空ですが、defaultsにもzは存在しないためnilを表示します。

関連の記事

Lua 配列にsetmetatableで振る舞いを変える

△上に戻る