将 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,也无法检查语法,但我希望思路清晰。
在尝试将以下 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,也无法检查语法,但我希望思路清晰。