Acquis 23 - Do Expressions
This manual page contains unstable information and its contents may
change at any time.
Do expressions are do/end blocks that evaluate to the value returned through the provide keyword.
Basic usage
Do expressions can be used anywhere an expression is allowed. The expression will be evaluated to the value returned through the provide keyword.
local x = do
local y = 10
provide y
end
assert(x == 10)
local z = 5 + do provide 10 end
assert(z == 15)
print(do provide local foo = "bar" provide "hello from " .. foo end) -- prints "hello from bar"
If no value is provided through the provide keyword, the do expression will evaluate to nil.
local x = do
local y = 10
end
assert(x == nil)
Multiple values can be provided, which will fill any local variables in order.
local x, y = do
provide 10, 20
end
assert(x == 10 and y == 20)
Catch expressions
Do expressions naturally integrate with the catch expression and serve as a more performant pcall-like construct.
local ok, x = catch do
provide 10
end
assert(ok and x == 10)
Use with group statements
Do expressions can be used with group local variables to initialize them.
local x <group> = do
local y <group> = { a = 1, b = 2 }
provide y
end
assert(x.a == 1 and x.b == 2)