Ох уж этот Lua, выпендрежный язык. Как перехватить присваивание значения ключу?
__index - для чтения значения, а __newindex вызывается только если ключ не существовал до присваивания. А вот просто метаметода для присваивания - не нашел.
- 09 августа 2014, 21:11
- 00
Как вариант:
local foo = setmetatable({_values = {}}, {
__newindex = function(t, k, v)
print(("setting %s to %s"):format(k, v))
t._values[k] = v
end,
__index = function(t, k)
return t._values[k]
end
})
foo.a = 5
foo.b = 6
foo.b = 7
print(foo.a, foo.b)
Правда не знаю, насколько это вообще нужно и не проще ли задавать значение через специальный метод вроде setFoo(value).
А, то есть вместо самого ключа писать не в него, а в другой ключ?
Надо это затем чтобы при команде obj.x = obj.x + dx на этот dx перемещался не только объект, но и все дочерние к нему объекты, а также при телепортации (obj.x = 20).
Спасибо, сейчас попробую.
Ага, получилось, thx