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

目次

確認環境:Windows10 64bit

 

setmetatableを使用して配列を参照する

setmetatableを使用すると振る舞いを変える・動作を追加できます。

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

1行目は、配列です。
9行目は、setmetatalbeで引数の1つめのcolorに引数の2つめのtable1を設定しています。
11行目は、キーのaは存在するので値のredが表示されます。
12行目は、キーのbは存在しないので存在しないという5行目で作成したメッセージが表示されます。

 

setmetatableを使用ないで配列を参照する

color1 = {a = "red"}

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

print(color1.a)  -- red
print(color1.b)  -- nil

上記コードは、setmetatableがありません。
10行目は、存在しないキーのbを参照し、その結果nilが表示されます。

関連の記事

Lua 関数から配列(テーブル型)を参照する(selfと:の関係)

△上に戻る