Struct Table

Source
pub struct Table(/* private fields */);
Expand description

Handle to an internal Lua table.

Implementations§

Source§

impl Table

Source

pub fn set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>

Sets a key-value pair in the table.

If the value is nil, this will effectively remove the pair.

This might invoke the __newindex metamethod. Use the raw_set method if that is not desired.

§Examples

Export a value as a global to make it usable from Lua:

let globals = lua.globals();

globals.set("assertions", cfg!(debug_assertions))?;

lua.load(r#"
    if assertions == true then
        -- ...
    elseif assertions == false then
        -- ...
    else
        error("assertions neither on nor off?")
    end
"#).exec()?;
Source

pub fn get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>

Gets the value associated to key from the table.

If no value is associated to key, returns the nil value.

This might invoke the __index metamethod. Use the raw_get method if that is not desired.

§Examples

Query the version of the Lua interpreter:

let globals = lua.globals();

let version: String = globals.get("_VERSION")?;
println!("Lua version: {}", version);
Source

pub fn contains_key(&self, key: impl IntoLua) -> Result<bool>

Checks whether the table contains a non-nil value for key.

This might invoke the __index metamethod.

Source

pub fn push(&self, value: impl IntoLua) -> Result<()>

Appends a value to the back of the table.

This might invoke the __len and __newindex metamethods.

Source

pub fn pop<V: FromLua>(&self) -> Result<V>

Removes the last element from the table and returns it.

This might invoke the __len and __newindex metamethods.

Source

pub fn equals(&self, other: &Self) -> Result<bool>

Compares two tables for equality.

Tables are compared by reference first. If they are not primitively equals, then mlua will try to invoke the __eq metamethod. mlua will check self first for the metamethod, then other if not found.

§Examples

Compare two tables using __eq metamethod:

let table1 = lua.create_table()?;
table1.set(1, "value")?;

let table2 = lua.create_table()?;
table2.set(2, "value")?;

let always_equals_mt = lua.create_table()?;
always_equals_mt.set("__eq", lua.create_function(|_, (_t1, _t2): (Table, Table)| Ok(true))?)?;
table2.set_metatable(Some(always_equals_mt));

assert!(table1.equals(&table1.clone())?);
assert!(table1.equals(&table2)?);
Source

pub fn raw_set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>

Sets a key-value pair without invoking metamethods.

Source

pub fn raw_get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>

Gets the value associated to key without invoking metamethods.

Source

pub fn raw_insert(&self, idx: Integer, value: impl IntoLua) -> Result<()>

Inserts element value at position idx to the table, shifting up the elements from table[idx].

The worst case complexity is O(n), where n is the table length.

Source

pub fn raw_push(&self, value: impl IntoLua) -> Result<()>

Appends a value to the back of the table without invoking metamethods.

Source

pub fn raw_pop<V: FromLua>(&self) -> Result<V>

Removes the last element from the table and returns it, without invoking metamethods.

Source

pub fn raw_remove(&self, key: impl IntoLua) -> Result<()>

Removes a key from the table.

If key is an integer, mlua shifts down the elements from table[key+1], and erases element table[key]. The complexity is O(n) in the worst case, where n is the table length.

For other key types this is equivalent to setting table[key] = nil.

Source

pub fn clear(&self) -> Result<()>

Clears the table, removing all keys and values from array and hash parts, without invoking metamethods.

This method is useful to clear the table while keeping its capacity.

Source

pub fn len(&self) -> Result<Integer>

Returns the result of the Lua # operator.

This might invoke the __len metamethod. Use the Table::raw_len method if that is not desired.

Source

pub fn raw_len(&self) -> usize

Returns the result of the Lua # operator, without invoking the __len metamethod.

Source

pub fn is_empty(&self) -> bool

Returns true if the table is empty, without invoking metamethods.

It checks both the array part and the hash part.

Source

pub fn metatable(&self) -> Option<Table>

Returns a reference to the metatable of this table, or None if no metatable is set.

Unlike the getmetatable Lua function, this method ignores the __metatable field.

Source

pub fn set_metatable(&self, metatable: Option<Table>)

Sets or removes the metatable of this table.

If metatable is None, the metatable is removed (if no metatable is set, this does nothing).

Source

pub fn set_readonly(&self, enabled: bool)

Available on crate feature luau only.

Sets readonly attribute on the table.

Requires feature = "luau"

Source

pub fn is_readonly(&self) -> bool

Available on crate feature luau only.

Returns readonly attribute of the table.

Requires feature = "luau"

Source

pub fn set_safeenv(&self, enabled: bool)

Available on crate feature luau only.

Controls safeenv attribute on the table.

This a special flag that activates some performance optimizations for environment tables. In particular, it controls:

  • Optimization of import resolution (cache values of constant keys).
  • Fast-path for built-in iteration with pairs/ipairs.
  • Fast-path for some built-in functions (fastcall).

For safeenv environments, monkey patching or modifying values may not work as expected.

Requires feature = "luau"

Source

pub fn to_pointer(&self) -> *const c_void

Converts this table to a generic C pointer.

Different tables will give different pointers. There is no way to convert the pointer back to its original value.

Typically this function is used only for hashing and debug information.

Source

pub fn pairs<K: FromLua, V: FromLua>(&self) -> TablePairs<'_, K, V>

Returns an iterator over the pairs of the table.

This works like the Lua pairs function, but does not invoke the __pairs metamethod.

The pairs are wrapped in a Result, since they are lazily converted to K and V types.

§Examples

Iterate over all globals:

let globals = lua.globals();

for pair in globals.pairs::<Value, Value>() {
    let (key, value) = pair?;
    // ...
}
Source

pub fn for_each<K, V>(&self, f: impl FnMut(K, V) -> Result<()>) -> Result<()>
where K: FromLua, V: FromLua,

Iterates over the pairs of the table, invoking the given closure on each pair.

This method is similar to Table::pairs, but optimized for performance. It does not invoke the __pairs metamethod.

Source

pub fn sequence_values<V: FromLua>(&self) -> TableSequence<'_, V>

Returns an iterator over all values in the sequence part of the table.

The iterator will yield all values t[1], t[2] and so on, until a nil value is encountered. This mirrors the behavior of Lua’s ipairs function but does not invoke any metamethods.

§Examples
let my_table: Table = lua.load(r#"
    {
        [1] = 4,
        [2] = 5,
        [4] = 7,
        key = 2
    }
"#).eval()?;

let expected = [4, 5];
for (&expected, got) in expected.iter().zip(my_table.sequence_values::<u32>()) {
    assert_eq!(expected, got?);
}

Trait Implementations§

Source§

impl Clone for Table

Source§

fn clone(&self) -> Table

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Table

Source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromLua for Table

Source§

fn from_lua(value: Value, _: &Lua) -> Result<Table>

Performs the conversion.
Source§

impl IntoLua for &Table

Source§

fn into_lua(self, _: &Lua) -> Result<Value>

Performs the conversion.
Source§

impl IntoLua for Table

Source§

fn into_lua(self, _: &Lua) -> Result<Value>

Performs the conversion.
Source§

impl ObjectLike for Table

Source§

fn get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>

Gets the value associated to key from the object, assuming it has __index metamethod.
Source§

fn set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>

Sets the value associated to key in the object, assuming it has __newindex metamethod.
Source§

fn call<R>(&self, args: impl IntoLuaMulti) -> Result<R>
where R: FromLuaMulti,

Calls the object as a function assuming it has __call metamethod. Read more
Source§

fn call_async<R>( &self, args: impl IntoLuaMulti, ) -> impl Future<Output = Result<R>>
where R: FromLuaMulti,

Available on crate feature async only.
Asynchronously calls the object as a function assuming it has __call metamethod. Read more
Source§

fn call_method<R>(&self, name: &str, args: impl IntoLuaMulti) -> Result<R>
where R: FromLuaMulti,

Gets the function associated to key name from the object and calls it, passing the object itself along with args as function arguments.
Source§

fn call_async_method<R>( &self, name: &str, args: impl IntoLuaMulti, ) -> impl Future<Output = Result<R>>
where R: FromLuaMulti,

Available on crate feature async only.
Gets the function associated to key name from the object and asynchronously calls it, passing the object itself along with args as function arguments. Read more
Source§

fn call_function<R: FromLuaMulti>( &self, name: &str, args: impl IntoLuaMulti, ) -> Result<R>

Gets the function associated to key name from the object and calls it, passing args as function arguments. Read more
Source§

fn call_async_function<R>( &self, name: &str, args: impl IntoLuaMulti, ) -> impl Future<Output = Result<R>>
where R: FromLuaMulti,

Available on crate feature async only.
Gets the function associated to key name from the object and asynchronously calls it, passing args as function arguments. Read more
Source§

fn to_string(&self) -> Result<StdString>

Converts the object to a string in a human-readable format. Read more
Source§

impl<T> PartialEq<&[T]> for Table
where T: IntoLua + Clone,

Source§

fn eq(&self, other: &&[T]) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> PartialEq<[T]> for Table
where T: IntoLua + Clone,

Source§

fn eq(&self, other: &[T]) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T, const N: usize> PartialEq<[T; N]> for Table
where T: IntoLua + Clone,

Source§

fn eq(&self, other: &[T; N]) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialEq for Table

Source§

fn eq(&self, other: &Table) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Table

Source§

fn serialize<S: Serializer>(&self, serializer: S) -> StdResult<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Table

Auto Trait Implementations§

§

impl Freeze for Table

§

impl !RefUnwindSafe for Table

§

impl Send for Table

§

impl Sync for Table

§

impl Unpin for Table

§

impl !UnwindSafe for Table

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromLuaMulti for T
where T: FromLua,

Source§

fn from_lua_multi(values: MultiValue, lua: &Lua) -> Result<T, Error>

Performs the conversion. Read more
Source§

fn from_lua_args( args: MultiValue, i: usize, to: Option<&str>, lua: &Lua, ) -> Result<T, Error>

Source§

unsafe fn from_stack_multi(nvals: i32, lua: &RawLua) -> Result<T, Error>

Source§

unsafe fn from_stack_args( nargs: i32, i: usize, to: Option<&str>, lua: &RawLua, ) -> Result<T, Error>

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoLuaMulti for T
where T: IntoLua,

Source§

fn into_lua_multi(self, lua: &Lua) -> Result<MultiValue, Error>

Performs the conversion.
Source§

unsafe fn push_into_stack_multi(self, lua: &RawLua) -> Result<i32, Error>

Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> MaybeSend for T
where T: Send,