Observable
Jump to navigation
Jump to search
This class allows you to watch for variables changes.
Call observable variable to push new state.
Author: CrosRoad95 Contact discord: mtasa.com/discord
Requirements
OOP turn on
Code
observable = {}
function observable:onChange(callback)
self.callback = callback
end
function observable:__tostring()
return self.value
end
function observable:__call(newState)
if(self.value == newState)then
return false
end
local oldValue = self.value;
self.value = newState;
if(self.callback)then
self.callback(oldValue, self.value)
end
return true;
end
function observable:create(defaultValue)
local t = { value = defaultValue, observators = {} }
setmetatable(t, self)
self.__index = self
return t
end
function watch(callback, ...)
for i,v in ipairs({...})do
v:onChange(function(old, new)
if(callback)then
callback(i, old, new)
end
end)
end
end
Example 1
How it works
a = observable:create("asdf") -- "asdf" is a default value.
b = observable:create(10)
watch(function(index, prvValue, newValue) -- called every time observable value has change.
print("index",index, "change", prvValue, "=> ",newValue)
end, a, b) -- pass variables you want to watch
a(20) -- index 1 change asdf => 20
b(30) -- index 2 change 10 => 30
a("aaa") -- index 1 change 20 => aaa
print("value:", a) -- in this case it will print "aaa"
See Also
- Singleton » This class allows to restrict the instantiation of a specific class to one object.
- CThread » This class represents a simple coroutine manager which can be used to limit method calls / loop.
- Importer » This class make easy to use exported functions.
- Observable » Observable variables. Call function on variable value change.
- MatrixPOP » This class allows to use simple matrix without using MTA's OOP functions