Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LUA/lvalue.lua.html -- http://angg.twu.net/LUA/lvalue.lua -- (find-angg "LUA/lvalue.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- (defun e () (interactive) (find-angg "LUA/lvalue.lua")) LValue = Class { type = "LValue", new = function (vname) local get0 = "function (_) return "..vname.." end" local set0 = "function (_,o) "..vname.." = o end" local expl = "get: "..get0.."\n".."set: "..set0 return LValue { get = expr(get0), set = expr(set0), explanation = expl } end, __tostring = function (lv) return lv.explanation end, __index = { }, } --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "lvalue.lua" A = {} A.b = 42 lv_b = LValue.new("A.b") = lv_b = lv_b:get() lv_b:set(200) = lv_b:get() = A.b --]] --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "lvalue.lua" --]] --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "lvalue.lua" -- getmetatable(_G) --> nil _LV = {} _LV["b"] = LValue.new("A.b") _GMT = {} setmetatable(_G, _GMT) _GMT.__newindex = function (tbl, key, value) -- print("__newindex:", key, value) local lv = _LV[key] if lv then lv:set(value) else rawset(tbl, key, value) end end _GMT.__index = function (tbl, key) -- print("__index:", key) local lv = _LV[key] if lv then return lv:get() else return nil end end foo = 42 foo = 43 b = 99 = A.b = b -- (find-lua51manual "#2.8" "Metatables") --]]