尽管随机生成器仅创建一次,但输出始终是相同的随机结果(对于所有三个测试输出)。
一个稍大的脚本的测试代码段:
let myRandGen = System.Random()
let getRandomObject =
let options = [|"Bob"; "Jim"; "Jane"|]
let randIndex = myRandGen.Next(options.Length)
options.[randIndex]
printfn "New one: %s" getRandomObject
printfn "New two: %s" getRandomObject
printfn "New three: %s" getRandomObject
我需要每个调用的输出是随机的,当前不是。
示例输出:
New one: Jane
New two: Jane
New three: Jane
答案 0 :(得分:12)
您的getRandomObject
是一个值。它被评估一次。要解决此问题,请使getRandomObject
为一个函数:
let getRandomObject () =
let options = [|"Bob"; "Jim"; "Jane"|]
let randIndex = myRandGen.Next(options.Length)
options.[randIndex]
并这样称呼:getRandomObject ()
答案 1 :(得分:4)
这对我有用:
let myRandGen = System.Random()
let getRandomObject () =
let options = [|"Bob"; "Jim"; "Jane"|]
let randIndex = myRandGen.Next(options.Length)
options.[randIndex]
printfn "New one: %s" (getRandomObject())
printfn "New two: %s" (getRandomObject())
printfn "New three: %s" (getRandomObject())
答案 2 :(得分:0)
您一次生成了随机数,在整个程序中不会改变。要在每次使用后获得一个新的随机值,必须重新初始化该随机值。