High-level Lua bindings for Moonbit
Dependencies
moon update
moon add tonyfettes/mua///|
enum Value {
Integer(Int64)
Number(Double)
String(String)
Boolean(Bool)
Nil
Thread(Lua)
Table(Table)
LightUserdata(LightUserdata)
Userdata(Userdata)
Function(Function)
}///|
let lua : @mua.Lua = try! @mua.new()// Simple evaluation
let results = lua.eval("return 1 + 2", [])
@json.inspect(results)
// With arguments
let results = lua.eval("return ... * 2", [Integer(21)])
@json.inspect(results)
// Multiple return values
let results = lua.eval("return 1, 'two', 3.0", [])
@json.inspect(results)// Push a value onto the stack
lua.push(Integer(42))
// Get a value from the stack
let value = lua.get(-1)
@json.inspect(value, content=[42])let results = lua.eval("return {1, 2, 3, x = 'hello'}", [])
match results[0] {
Table(table) => {
// Get table length
let len = table.length()
@json.inspect(len, content=3)
// Get value by key
let value = table.get(Integer(1))
@json.inspect(value, content=[1])
let x = table.get(String("x"))
@json.inspect(x, content=["hello"])
// Convert to array
let array = table.to_array()
@json.inspect(array, content=[1, 2, 3])
// Iterate over all key-value pairs
for k, v in table {
println("\{k} => \{v}")
}
}
_ => ()
}let _ = lua.eval("error('something went wrong')", []) catch {
err => {
// err is of type Err
match err {
RuntimeError(value) => println("Runtime error: \{value}")
SyntaxError(value) => println("Syntax error: \{value}")
MemoryError(value) => println("Memory error: \{value}")
_ => println("Other error")
}
[]
}
}moon testmoon test --updatemoon check # Type check and lint
moon test # Run tests
moon info && moon fmt # Update interfaces and formattype Functiontype LightUserdataimpl Show for LightUserdataimpl ToJson for LightUserdatatype Luatype Tabletype Userdatapub(all) enum Value {
Integer(Int64)
Number(Double)
String(String)
Boolean(Bool)
Nil
Thread(Lua)
Table(Table)
LightUserdata(LightUserdata)
Userdata(Userdata)
Function(Function)
}High-level Lua bindings for Moonbit
Dependencies