如何从同一个 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
y
和 z
仍然是“随机”值,因为它们是从 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)
基本上我想要的是:
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
y
和 z
仍然是“随机”值,因为它们是从 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)