gpt4 book ai didi

function - F# 生成随机数时的函数简洁性

转载 作者:行者123 更新时间:2023-12-03 06:27:24 24 4
gpt4 key购买 nike

有人写下这一行是有原因的吗:

(fun max -> rndGen.Next(max))  

https://github.com/sebfia/OffLog/blob/master/Shared/Helpers.fs#L8

let NextRandom =
let rndGen = new System.Random(int System.DateTime.Now.Ticks)
(fun max -> rndGen.Next(max))

而不是像这样直接声明参数 max 并调用 rndGen.Next(max)

let NextRandom (max: int) =
let rndGen = new System.Random(int System.DateTime.Now.Ticks)
rndGen.Next(max)

最佳答案

区别在于生命周期:

  • 在第一种情况下,rndGen 仅播种一次并在之后重用,并且将在定义 NextRandom 的范围的生命周期内生存 - 如果类范围类的生命周期,或者如果是模块范围,则为 AppDomain 的生命周期。
  • 在第二个中,rndGen 将被创建 - 并播种! – 每次调用 NextRandom 时都会重新开始。

最终效果是,如果快速连续地重复调用 NextRandom,第二个版本可以(并且很可能会)连续多次返回相同的“随机”数字,从而使其有效对于许多正常用例来说没有用,例如初始化随机数集合。不过,与第一个版本不同的是,第二个版本的优点是线程安全。

关于function - F# 生成随机数时的函数简洁性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38409548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com