lua - Lua math.randomseed 返回相同的值
问题描述
这是一个随机生成器
local hexset = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8','9', 'a', 'b', 'c', 'd', 'e', 'f'
}
function random_hex(length)
math.randomseed(os.time())
if length > 0 then
return random_hex(length - 1) .. hexset[math.random(1, #hexset)]
else
return ""
end
end
print(utils.random_hex(32))
print(utils.random_hex(32))
print(utils.random_hex(32))
print(utils.random_hex(32))
4print
给了我完全相同的 RequestSid:
46421938586706fff767d26410f524ee
46421938586706fff767d26410f524ee
46421938586706fff767d26410f524ee
46421938586706fff767d26410f524ee
我在我的 openresty 应用程序中使用它。我也尝试math.randomseed(os.time())
在我的 lua 顶层设置一次。然后在进行 100 个并发调用后,我得到了大约 6 个重复的十六进制。
解决方案
math.randomseed
首先接受它的参数并将其转换为整数。的整数部分os.time()
通常每秒只更改一次,因此使用这种方法,您将在一秒钟内获得相同的随机值序列。
您可能不想重复设置随机种子。在程序开始时设置一次就足够了(尽管math.random
可能不是一个非常高质量的随机数生成器)。
推荐阅读
- c++ - 读取矢量的最快方法
从文件 - ios - iPad 上的键盘高度不正确
- excel - 从 Excel 中最后一个单元格的连接字符串中删除逗号
- sql - SQL Server 查询 - 选择返回行,但更新 0 行
- firebase - 查询数据库有对象但getValue()会返回null
- python - 张量“embedding_input”的形状无效“[None, None]”
- javascript - 使用 ReactJS 进行 D3Plus 可视化
- java - 如何使用 Apache Camel 处理大型 JSON 数组
- sql - SQL 累积总和直到一个标志值并重置总和
- java - lambda 中使用的 Java 8 流变量应该是最终的或有效的最终的