Don*_* Ch 3 random f# function
有人写这条线的原因是:
(fun max -> rndGen.Next(max))
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
而不仅仅是声明param max upfront and calling rndGen.Next(max),就像这样?
let NextRandom (max: int) =
let rndGen = new System.Random(int System.DateTime.Now.Ticks)
rndGen.Next(max)
Run Code Online (Sandbox Code Playgroud)
不同之处在于:
rndGen只播种一次并在其后重复使用,并且将在NextRandom定义范围的生命周期中生存 - 如果类范围是类的生命周期,或者模块范围是生命周期AppDomain.rndGen将创建 - 和种子!- 每次重新NextRandom调用.实际效果是,如果NextRandom快速连续重复调用,第二个版本可以(很可能会)连续多次返回相同的"随机"数字,这使得它对许多正常使用情况有效无用,例如初始化随机集合数字.但是,与第一个版本不同,第二个版本具有线程安全的优点.