View Source Luex.Table.Array (luex v0.0.2)

access Lua arrays (heavy wip state)

Lua arrays are tables with their keys being the integer index of a stored value

Link to this section Summary

Functions

append lua value to a lua array

folds the array from the lowest to the hightest index

check if a table is a well formed lua array.

build a lua array from elixir list

build a elixir list from a lua array

Link to this section Types

@type folder(acc) :: (index :: Luex.lua_number(), element :: Luex.lua_value(), acc ->
                  acc)

Link to this section Functions

Link to this function

append(vm, root_tref, val)

View Source
@spec append(Luex.vm(), Luex.lua_table(), Luex.lua_value()) :: Luex.vm()

append lua value to a lua array

Example

iex> %Luex.CallResult{vm: vm} = Luex.init() |> Luex.do_inline("""
...>   numbers = {"eins", "zwei"}
...> """)
iex> %Luex.CallResult{return: numbers, vm: vm} = Luex.get_value(vm, ["numbers"])
iex> vm = Luex.Table.Array.append(vm, numbers, "drei")
iex> Luex.Table.get_data(vm, numbers)
%{1 => "eins", 2 => "zwei", 3 => "drei"}
Link to this function

fold(vm, ref, acc, folder)

View Source
@spec fold(Luex.vm(), Luex.lua_table(), acc, folder(acc)) :: acc when acc: any()

folds the array from the lowest to the hightest index

Example

iex> %Luex.CallResult{return: [numbers], vm: vm} = Luex.init() |> Luex.do_inline("""
...>   numbers = {"eins", "zwei", "drei"}
...>   return numbers
...> """)
iex> Luex.Table.Array.fold(vm, numbers, "null", fn _index, value, acc -> "#{acc}, #{value}" end)
"null, eins, zwei, drei"
@spec lua_array?(Luex.vm(), Luex.lua_table()) :: boolean()

check if a table is a well formed lua array.

Example

iex> %Luex.CallResult{return: [array], vm: vm} = Luex.init() |> Luex.do_inline("""
...>   return {"a", "b", "c"};
...> """)
iex> Luex.Table.Array.lua_array?(vm, array)
true
iex> %Luex.CallResult{return: [no_array], vm: vm} = Luex.init() |> Luex.do_inline("""
...>   return { a = 123; b = 567; };
...> """)
iex> Luex.Table.Array.lua_array?(vm, no_array)
false

build a lua array from elixir list

@spec to_list(Luex.vm(), Luex.lua_table()) :: [Luex.lua_value()]

build a elixir list from a lua array

Example

iex> %Luex.CallResult{return: [array], vm: vm} = Luex.init() |> Luex.do_inline("""
...>   return {"a", "b", "c"};
...> """)
iex> Luex.Table.Array.to_list(vm, array)
["a", "b", "c"]