pub struct Table(/* private fields */);
Expand description
Handle to an internal Lua table.
Implementations§
Source§impl Table
impl Table
Sourcepub fn set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>
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()?;
Sourcepub fn get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>
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);
Sourcepub fn contains_key(&self, key: impl IntoLua) -> Result<bool>
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.
Sourcepub fn push(&self, value: impl IntoLua) -> Result<()>
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.
Sourcepub fn pop<V: FromLua>(&self) -> Result<V>
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.
Sourcepub fn equals(&self, other: &Self) -> Result<bool>
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)?);
Sourcepub fn raw_set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>
pub fn raw_set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>
Sets a key-value pair without invoking metamethods.
Sourcepub fn raw_get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>
pub fn raw_get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>
Gets the value associated to key
without invoking metamethods.
Sourcepub fn raw_insert(&self, idx: Integer, value: impl IntoLua) -> Result<()>
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.
Sourcepub fn raw_push(&self, value: impl IntoLua) -> Result<()>
pub fn raw_push(&self, value: impl IntoLua) -> Result<()>
Appends a value to the back of the table without invoking metamethods.
Sourcepub fn raw_pop<V: FromLua>(&self) -> Result<V>
pub fn raw_pop<V: FromLua>(&self) -> Result<V>
Removes the last element from the table and returns it, without invoking metamethods.
Sourcepub fn raw_remove(&self, key: impl IntoLua) -> Result<()>
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
.
Sourcepub fn clear(&self) -> Result<()>
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.
Sourcepub fn len(&self) -> Result<Integer>
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.
Sourcepub fn raw_len(&self) -> usize
pub fn raw_len(&self) -> usize
Returns the result of the Lua #
operator, without invoking the __len
metamethod.
Sourcepub fn is_empty(&self) -> bool
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.
Sourcepub fn metatable(&self) -> Option<Table>
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.
Sourcepub fn set_metatable(&self, metatable: Option<Table>)
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).
Sourcepub fn set_readonly(&self, enabled: bool)
Available on crate feature luau
only.
pub fn set_readonly(&self, enabled: bool)
luau
only.Sets readonly
attribute on the table.
Requires feature = "luau"
Sourcepub fn is_readonly(&self) -> bool
Available on crate feature luau
only.
pub fn is_readonly(&self) -> bool
luau
only.Returns readonly
attribute of the table.
Requires feature = "luau"
Sourcepub fn set_safeenv(&self, enabled: bool)
Available on crate feature luau
only.
pub fn set_safeenv(&self, enabled: bool)
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"
Sourcepub fn to_pointer(&self) -> *const c_void
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.
Sourcepub fn pairs<K: FromLua, V: FromLua>(&self) -> TablePairs<'_, K, V> ⓘ
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?;
// ...
}
Sourcepub fn for_each<K, V>(&self, f: impl FnMut(K, V) -> Result<()>) -> Result<()>
pub fn for_each<K, V>(&self, f: impl FnMut(K, V) -> Result<()>) -> Result<()>
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.
Sourcepub fn sequence_values<V: FromLua>(&self) -> TableSequence<'_, V> ⓘ
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 ObjectLike for Table
impl ObjectLike for Table
Source§fn get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>
fn get<V: FromLua>(&self, key: impl IntoLua) -> Result<V>
key
from the object, assuming it has __index
metamethod.Source§fn set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>
fn set(&self, key: impl IntoLua, value: impl IntoLua) -> Result<()>
key
in the object, assuming it has __newindex
metamethod.Source§fn call<R>(&self, args: impl IntoLuaMulti) -> Result<R>where
R: FromLuaMulti,
fn call<R>(&self, args: impl IntoLuaMulti) -> Result<R>where
R: FromLuaMulti,
__call
metamethod. Read moreSource§fn call_async<R>(
&self,
args: impl IntoLuaMulti,
) -> impl Future<Output = Result<R>>where
R: FromLuaMulti,
fn call_async<R>(
&self,
args: impl IntoLuaMulti,
) -> impl Future<Output = Result<R>>where
R: FromLuaMulti,
async
only.__call
metamethod. Read moreSource§fn call_method<R>(&self, name: &str, args: impl IntoLuaMulti) -> Result<R>where
R: FromLuaMulti,
fn call_method<R>(&self, name: &str, args: impl IntoLuaMulti) -> Result<R>where
R: FromLuaMulti,
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,
fn call_async_method<R>(
&self,
name: &str,
args: impl IntoLuaMulti,
) -> impl Future<Output = Result<R>>where
R: FromLuaMulti,
async
only.name
from the object and asynchronously calls it,
passing the object itself along with args
as function arguments. Read moreSource§fn call_function<R: FromLuaMulti>(
&self,
name: &str,
args: impl IntoLuaMulti,
) -> Result<R>
fn call_function<R: FromLuaMulti>( &self, name: &str, args: impl IntoLuaMulti, ) -> Result<R>
name
from the object and calls it,
passing args
as function arguments. Read moreSource§fn call_async_function<R>(
&self,
name: &str,
args: impl IntoLuaMulti,
) -> impl Future<Output = Result<R>>where
R: FromLuaMulti,
fn call_async_function<R>(
&self,
name: &str,
args: impl IntoLuaMulti,
) -> impl Future<Output = Result<R>>where
R: FromLuaMulti,
async
only.name
from the object and asynchronously calls it,
passing args
as function arguments. Read moreimpl 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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FromLuaMulti for Twhere
T: FromLua,
impl<T> FromLuaMulti for Twhere
T: FromLua,
Source§fn from_lua_multi(values: MultiValue, lua: &Lua) -> Result<T, Error>
fn from_lua_multi(values: MultiValue, lua: &Lua) -> Result<T, Error>
fn from_lua_args( args: MultiValue, i: usize, to: Option<&str>, lua: &Lua, ) -> Result<T, Error>
unsafe fn from_stack_multi(nvals: i32, lua: &RawLua) -> Result<T, Error>
unsafe fn from_stack_args( nargs: i32, i: usize, to: Option<&str>, lua: &RawLua, ) -> Result<T, Error>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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