System.Random产生相同的随机数

McG*_*gus 6 random f#

尽管随机生成器仅创建一次,但输出始终是相同的随机结果(对于所有三个测试输出)。

一个稍大的脚本的测试代码段:

   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
Run Code Online (Sandbox Code Playgroud)

我需要每个调用的输出是随机的,当前不是。

输出示例:

New one: Jane
New two: Jane
New three: Jane
Run Code Online (Sandbox Code Playgroud)

nil*_*irk 13

getRandomObject是一个价值。它被评估一次。要解决此问题,请执行getRandomObject以下功能:

let getRandomObject () = 
  let options = [|"Bob"; "Jim"; "Jane"|]
  let randIndex  = myRandGen.Next(options.Length) 
  options.[randIndex]
Run Code Online (Sandbox Code Playgroud)

并这样称呼它: getRandomObject ()

  • getRandomObject id单元的类型->字符串。我猜你在某处有压痕问题。也许检查“ printfn“ New one:%s”(getRandomObject())“(或” options。[randIndex]“之后的内容)的缩进 (2认同)