将 C# 'using' 关键字转换为 F#

Convert C# 'using' keyword to F#

在尝试将以下 C# 代码转换为 F# 时,我遇到了 'using' 关键字的问题。以下代码段来自 ILNumerics 库。如何翻译以下内容?

ILRetArray<double> ObjFuncBFGS2D(ILInArray<double> X) {
    using (ILScope.Enter(X)) {
        return X[0] * X[0] + X[1] * X[1] + 2; 
    }
} 

附带说明一下,F# 用户倾向于使用哪些库进行优化?我一直在使用 NLoptNet,但在 Matlab 和 Julia 和 Python 中正确收敛的例程存在非常奇怪的收敛问题。因此,问题出在我的 F# 翻译(假设这更有可能)或优化库。这就是我希望确定的。坦率地说,我对互联网上缺乏与 F# 相关的数值优化感到有点惊讶 material。

The MSDN documentation on resource management in F# 在这里是相关的。要自动处理,F# 中常用的方法是:

  • use,它会替换 let 并在绑定超出范围后处理
  • using,一个在完成时获取资源进行处置的函数和一个在处置前执行的函数,它将一次性对象作为输入。

带有 use 的代码可能如下所示:

let ObjFuncBFGS2D (X : ILInArray<double>) =
    use myEnteredScope = ILScope.Enter(X)
    X.[0] * X.[0] + X.[1] * X.[1] + 2

或者,使用 using,像这样:

let ObjFuncBFGS2D (X : ILInArray<double>) =
    using (ILScope.Enter(X)) <| fun _ ->
        X.[0] * X.[0] + X.[1] * X.[1] + 2

我不使用 ILNumerics,也无法检查语法,但我希望思路清晰。