Macro mlua::chunk

source ·
chunk!() { /* proc-macro */ }
Available on crate feature macros only.
Expand description

Create a type that implements AsChunk and can capture Rust variables.

This macro allows to write Lua code directly in Rust code.

Rust variables can be referenced from Lua using $ prefix, as shown in the example below. User’s Rust types needs to implement UserData or IntoLua traits.

Captured variables are moved into the chunk.

use mlua::{Lua, Result, chunk};

fn main() -> Result<()> {
    let lua = Lua::new();
    let name = "Rustacean";
    lua.load(chunk! {
        print("hello, " .. $name)
    }).exec()
}

§Syntax issues

Since the Rust tokenizer will tokenize Lua code, this imposes some restrictions. The main thing to remember is:

  • Use double quoted strings ("") instead of single quoted strings ('').

    (Single quoted strings only work if they contain a single character, since in Rust, 'a' is a character literal).

  • Using Lua comments -- is not desirable in stable Rust and can have bad side effects.

    This is because procedural macros have Line/Column information available only in nightly Rust. Instead, Lua chunks represented as a big single line of code in stable Rust.

    As workaround, Rust comments // can be used.

Other minor limitations:

  • Certain escape codes in string literals don’t work. (Specifically: \a, \b, \f, \v, \123 (octal escape codes), \u, and \U).

    These are accepted: : \\, \n, \t, \r, \xAB (hex escape codes), and \0.

  • The // (floor division) operator is unusable, as its start a comment.

Everything else should work.