Skip to main content

Attributes

The Attribute observer is triggered when an attribute is set to a non-nil value.

Observers.observeAttribute(myInstance, "MyAttribute", function(value)
print("Attribute is", value)

return function()
print("Attribute is no longer", value)
end
end)

Typing​

Technically, the value of an attribute is not known (it's not necessarily unknown, as we know it's some sort of attribute value, of which there is a limited amount of types). However, to make the API easier to use, observeAttribute uses a generic value to allow developers to denote what type they expect. For instance, a string:

Observers.observeAttribute(myInstance, "MyAttribute", function(value: string) ... end)

However, be aware that this does not enforce the attribute to be a specific type. Especially in client-facing code, it is good to ensure that the type of the attribute matches what is expected. For instance, if a string is expected:

Observers.observeAttribute(myInstance, "MyAttribute", function(value: string)
assert(typeof(value) == "string", "expected string for MyAttribute; got " .. typeof(value))
...
end)

Guards​

A guard is an optional predicate function that can be used to control if the observer function should be triggered for a given value. For instance, this could be used to type-check the value at runtime.

Observers.observeAttribute(
myInstance,
"MyAttribute",
function(value: string)
print("value is a string", value)
end,
function(value: unknown)
-- Guard function ensures the value is a string.
-- The observer will only trigger if this returns a truthy value.
return typeof(value) == "string"
end
)