lua学習のモニタリングテーブル

594 ワード

__indexと_newindexは、テーブルにアクセスするドメインが存在しない場合にのみ機能します.1つのテーブルへのすべてのアクセスをキャプチャする唯一の方法は、テーブルを空に保つことです.テーブルのすべてのアクセスを監視するには、空のテーブルであるエージェントを作成する必要があります.
local index = {}

local mt = {
	__index = function(t, k)
		print("*access to element "..tostring(k))
		return t[index][k]
	end,
    
    __newindex = function (t,k,v)
    	print("*update of element "..tostring(k).." to "..tostring(v))
    	t[index][k] = v
    end
}

function trace(t)
	local proxy = {}   --  
	proxy[index] = t
	setmetatable(proxy, mt)

	return proxy
end
私たちがモニターしたいのは、t=trace(t)だけです.