我查了几个关于如何用lua生成随机数的教程,每个教程都说要使用math.random(),所以我就这么做了。然而,每次我使用它时,我每次都会得到相同的数字,我尝试重写代码,并且我总是得到尽可能小的数字。我什至包含了一个基于操作系统时间的随机种子。代码如下。
require "math"
math.randomseed(os.time())
num = math.random(0,10)
print(num)
我正在使用这样的随机函数:
math.randomseed(os.time())
num = math.random() and math.random() and math.random() and math.random(0, 10)
这工作正常。另一种选择是改进内置随机函数,如here所述。
这可能有帮助!我必须使用这些函数来编写一个生成 Nano ID 的类。我基本上使用了 os.clock() 函数中的毫秒,并将其用于 math.randomseed()。
NanoId = {
validCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-",
generate = function (size, validChars)
local response = ""
local ms = string.match(tostring(os.clock()), "%d%.(%d+)")
local temp = math.randomseed(ms)
if (size > 0 and string.len(validChars) > 0) then
for i = 1, size do
local num = math.random(string.len(validChars))
response = response..string.sub(validChars, num, num)
end
end
return response
end
}
function NanoId:Generate()
return self.generate(21, self.validCharacters)
end
-- Runtime Testing
for i = 1, 10 do
print(NanoId:Generate())
end
--[[
Output:
>>> p2r2-WqwvzvoIljKa6qDH
>>> pMoxTET2BrIjYUVXNMDNH
>>> w-nN7J0RVDdN6-R9iv4i-
>>> cfRMzXB4jZmc3quWEkAxj
>>> aFeYCA2kgOx-s4UN02s0s
>>> xegA--_EjEmcDk3Q1zh7K
>>> 6dkVRaNpW4cMwzCPDL3zt
>>> R2Fct5Up5OwnHeExDnqZI
>>> JwnlLZcp8kml-MHUEFAgm
>>> xPr5dULuv48UMaSTzdW5J
]]
在
math.random()
之后添加 math.randomseed(os.time())
似乎适合我。
math.randomseed(os.time())
math.random()
num = math.random(0, 10)
print(num)
io.read()