If you having a understanding of what arguments, parameters and functions
are (in which you should probably know before taking this tutorial), you might not know what variadic arguments are or heard of them, but dont know what they are.
Variadic functions can take in pretty much any amount of arguments unlike
normal arguments which you'd need to define a parameter. There are
in fact multiple built in methods from the library that are variadic functions such as print(), if you
didnt know can print multiple strings without calling it multiple times.
A variadic function can be defined by 3 dots "..." and can only
be placed as the last parameter or the only parameter in the function.
Usually you should put the arguments it stores inside a table ex
"local table = {...}". Then to access those parameters you could either
iterate through the table or just index a specific element.
local function myHobbies(prefix, ...) -- the last parameter
local hobbies = {...}
print(prefix..table.concat(hobbies, ", "))
--then if you wanted to iterate through it...
for i,v in pairs(hobbies) do
print(i,v)
end
end
myHobbies("my hobbies are: ", "sleeping", "drinking", "doing nothing")
That should print "my hobbies are: sleeping, drinking, doing nothing" and we
didnt even need to create a parameter for each of those hobbies!. Also
if you're wondering what the "table.concat()" method is, I might just
create a simple explantion. table.concat pretty much just concatenates every
element in a table in one string and a separator string can be used
to separate each element one from each other. Now that we have a basic
understanding of what a variadic function is, we might just create an algorithm or system
that kind've replicates how print() would work.
local function printStuff(...)
local strs = {...}
print(table.concat(strs, " "))
end
printStuff("aa", "lol") -- "aa lol"
You might be wondering "what can I use this for?", in which it could be
used for to create an algorithm to challenge yourself, creating your own
custom classes with Object Oriented Programming (OOP). Maybe you could
create a function that takes in numbers and gets the sum out of all of them.
local function getSum(a, b, ...)
local numbers = {a, b, ...}
local sum = 0
for _,num in pairs(numbers) do
if type(num) == "number" then -- check if its a number
sum = sum + num
end
end
return sum -- return the sum
end
end
print(getSum(10,12,234,12)) -- prints "268"
print(getSum(19,100,nil,3)) -- prints "122"