在Lua中获取随机数的其他方法

Nol*_* M. 3 random lua

我正在寻找另一种方法来获取Lua中的随机数,该数字介于最小和最大数之间而不使用math.random().有什么办法吗?它不一定是一个简单的方法.

Oka*_*Oka 5

就像评论所暗示的那样,在类Unix系统上,你可以从/dev/random或读取字节/dev/urandom,并从中创建一个随机数.

urand = assert (io.open ('/dev/urandom', 'rb'))
rand  = assert (io.open ('/dev/random', 'rb'))

function RNG (b, m, r)
  b = b or 4
  m = m or 256
  r = r or urand
  local n, s = 0, r:read (b)

  for i = 1, s:len () do
    n = m * n + s:byte (i)
  end

  return n
end
Run Code Online (Sandbox Code Playgroud)

作为这个答案的延伸,为了好玩,我编写了一个非常小的模块randbytes,以便未来的读者可以以简单的方式使用/dev/random/dev/urandom接口.这是一个快速下来.

安装luarocks,或手动抓取文件.

$ luarocks install randbytes
Run Code Online (Sandbox Code Playgroud)

需要模块或文件.

$ lua
> randbytes = require 'randbytes'
Run Code Online (Sandbox Code Playgroud)

然后抓住一些字节.

> print (randbytes (8))
Run Code Online (Sandbox Code Playgroud)

现在,我已经清理并包含上面显示的非常简单的生成算法,用于生成基本随机数.

> print (randbytes:urandom (16))
Run Code Online (Sandbox Code Playgroud)

您可以在基本界面的基础上构建自己的算法.阅读文档以获取完整的方法和设置列表.