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