How to give X, Y, Z different values from the same math.random() function?

Viewed 100

Basically what i want is:

local X, Y, Z = math.random()

Without assigning each value to math.random():

local X, Y, Z = math.random(), math.random(), math.random()
3 Answers

There is no need to build an intermediate table though; you can simply write a recursive function to generate the vararg:

local function rand(n)
    if n == 1 then return math.random() end
    return math.random(), rand(n-1)
end

shorter (and possibly faster); also doesn't create a garbage table; even better, you could generalize this:

local function rep(func, n)
    if n == 1 then return func() end
    return func(), rep(func, n-1)
end

then use as follows:

local x, y, z = rep(math.random, 3)

You can write a function that does that for you:

local function rand(n)
    local res = {}
    for i = 1, n do
        table.insert(res, math.random())
    end
    return table.unpack(res)
end

And call it like that:

local X, Y, Z = rand(3) -- Get 3 random numbers
print(X, Y, Z)

math.random() only returns one number, but you can just set one variable to be the result of math.random(), then set the others based on some mathematical operation of the variable you assigned to be math.random().

For instance:

local x = math.random()
local y = x * 5
local z = y - x

y and z are still "random" values because they're indirectly generated from math.random().

Related