|
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")
--]]