Lua очень клёвый и компактный язык.
В нем по сути всего две разновидности групп типов переменных: простые переменные (number/string и т.п.) и таблицы. При этом для таблиц доступен синтаксис "а-ля структура".
Стоит тут же сразу отметить, что "переменные простых типов" на самом деле поля глобальной таблицы, просто синтаксически её можно не указывать 
Т.е., вообще говоря, всё в Lua - таблицы. И всё. Изучить надо всего 1 тип. Классно же, правда?
Таблица в стиле "структура":
t = {}
t.price = 5
t.qty = 100
Такой синтаксис выглядит как заполнение структуры, правда же? Здорово.
И обращаться можно в стиле структур:
Однако на самом деле t в вышеприведенном коде - это таблица с двумя элементами:
и обращаться к ней можно как к таблице (или массиву в терминологии других языком программирования):
vol = t["price"] * t["qty"]
Теперь к сути исходного вопроса.
Таблицы можно передавать в функцию:
function GetVol(q)
return q.price * q.qty
end
t = {}
t.price = 5
t.qty = 100
vol = GetVol(t)
При этом важно помнить, что таблица всегда передается по ссылке в функцию.
А простые типы - по значению.
Например
function GetVol(q)
q.price = 6
return q.price * q.qty
end
t = {}
t.price = 5
t.qty = 100
print("Price1=", t.price)
print("Vol=", GetVol(t))
print("Price2=", t.price)
напечатает
Price1= 5
Vol= 600
Price2= 6 <-- значение поля переданной таблицы изменено внутри функции!
Можете скопировать этот код сюда и убедиться:
[url]https://qlua.ru/demo/[/url]
PS
Вообще, конечно, хорошо бы почитать книжку любую простую по Lua. Это ж недолго. Зато вот эти все вопросы сразу отпадут, тем более что язык несколько самобытен местами.