Observable: Difference between revisions
Jump to navigation
Jump to search
CrosRoad95 (talk | contribs) (Created page with "{{Useful Class}} __NOTOC__ This class allows you to watch for variables changes. Call observable variable to push new state. Author: CrosRoad95 Contact discord: mtasa.com/di...") |
(Removed unnecessary padding.) |
||
Line 1: | Line 1: | ||
__NOTOC__ | |||
{{Useful Class}} | {{Useful Class}} | ||
This class allows you to watch for variables changes. | This class allows you to watch for variables changes. | ||
Latest revision as of 12:56, 14 February 2024
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