rlua 0.18.0

High level bindings to Lua 5.x
Documentation
# FAQ

### Why 'static lifetime is required when passing data to Lua as UserData?

> Since we don't know when Lua will get around to garbage collecting our userdata, we can't make any assumptions about the lifetimes of any references in the userdata.

* https://github.com/amethyst/rlua/issues/74#issuecomment-370152884
* https://github.com/amethyst/rlua/issues/20#issuecomment-405751583

### What is `scope` and why should I need it?

Normally, Rust types passed to `Lua` must be `Send`, because `Lua` itself is `Send`, and must be `'static`, because there is no way to tell when Lua might garbage collect them.  There is, however, a limited way to lift both of these restrictions.  You can call `Lua::scope` to create userdata types that do not have to be `Send`, and callback types that do not have to be `Send` OR `'static`.  However, after `scope` returns any `UserData` passed to Lua are invalidated (access from Lua will error).

### How can I store Lua values (like `Table`) outside of `Lua::context()`?

The Lua API in general doesn't give out references to Lua values - you can only interact with them indirectly throught the API.  In `rlua`, types like `rlua::Table` internally store an index into the current `Lua` stack, which is why they are only valid within the `context` callback.

There are some options for keeping longer references:

#### Store it in the registry.

The Lua registry is a global `Table` available for use through the API.  Add references using `Context::create_registry_value()` which returns a key which can be later used with `Context::registry_value()`, or provide your own key with `Context::set_named_registry_value()`/`Context::named_registry_value()`.

#### Store it with a `UserData` value

A Lua value can be attached with a `UserData` value using `AnyUserData::set_user_value()`/`AnyUserData::get_user_value()`.  With Lua 5.4+ multiple values can be stored using `AnyUserData::set_i_user_value()`/`AnyUserData::get_i_user_value()`.