TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 5 / __newindex

-- __newindex イベントは、存在していないフィールドに値を代入するときに適用される。

-- テスト用のメタメソッドを定義する。
function testMethod(t, k, v)
   rawset(t, k, v + 1000) -- t[k] = v + 1000 と同じことだが、t[k] = v + 1000 だとメタメソッドが呼ばれるのでエラーになる。rawset() の場合はメタメソッドが呼ばれない。
end

-- メタテーブルをセットする。
testTable = setmetatable({1, 2, _, 4, 5}, {__newindex = testMethod})

-- 確認してみる。
-- 元のテーブル ({1, 2, _, 4, 5} のこと) に存在していないフィールドに値を代入するときに testMethod() が実行される。
for i = -10, 10 do
   testTable[i] = i
   print(i, testTable[i])
end

f:id:ti-nspire:20170213095030p:plain