我需要在繁重的数值模拟中使用 Some/None 选项。下面的微基准测试给了我Fast = 485
和Slow = 5890
.
我不喜欢 null,即使我喜欢它们,我也不能使用 null,因为The type 'float' does not have 'null' as a proper value
.
理想情况下,会有一个编译器选项将 Some/None 编译为 value/null,因此不会有运行时损失。那可能吗?或者我应该如何使 Some/None 高效?
let s = System.Diagnostics.Stopwatch()
s.Start()
for h in 0 .. 1000 do
Array.init 100000 (fun i -> (float i + 1.)) |> ignore
printfn "Fast = %d" s.ElapsedMilliseconds
s.Restart()
for h in 0 .. 1000 do
Array.init 100000 (fun i -> Some (float i + 1.)) |> ignore
printfn "Slow = %d" s.ElapsedMilliseconds