如何从同一个 math.random() 函数中给 X、Y、Z 不同的值?

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

基本上我想要的是:

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

没有将每个值分配给 math.random():

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

math.random()只有returns一个数字,但是你可以只设置一个变量作为math.random()的结果,然后根据变量的一些数学运算设置其他变量指定为 math.random().

例如:

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

yz 仍然是“随机”值,因为它们是从 math.random().

间接生成的

您可以编写一个函数来为您完成这项工作:

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

然后这样称呼它:

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

虽然没有必要构建中间层 table;您可以简单地编写一个递归函数来生成可变参数:

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

更短(也可能更快);也不会产生垃圾 table;更好的是,你可以概括这个:

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

然后使用如下:

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