【发布时间】:2015-07-22 06:23:38
【问题描述】:
我试图在 F# 中通过引用传递。在 C# 中,使用 ref 和 out 关键字非常容易,但在 F# 中似乎并不那么简单。我刚读到这个:http://davefancher.com/2014/03/24/passing-arguments-by-reference-in-f/,它建议使用参考单元格。 (我想这意味着在 C# 中没有类似于 out 关键字的地方,您不必初始化变量来传递它。)
但无论如何,我想知道这是否是在 F# 中通过引用传递的最佳/唯一方法,以及在函数式语言中这是否是一个好主意。
编辑:
我很感兴趣,因为我刚刚意识到异常会减慢我的代码速度。我正在努力消灭他们。基本上,我的计划是这样的:假设一个函数返回一个双精度值,或者如果有错误则抛出一个异常。相反,我将通过引用传递一个 double 和一个 ErrorCode 类型作为位掩码,然后将值和错误向下传递。我猜我只需要让所有这些变量都是可变的。
【问题讨论】:
-
为什么需要这样做?如果要能够调用现有的 BCL 方法,如
TryParse,请按以下步骤操作:stackoverflow.com/a/13589596/126014 -
@WesleyWiser 给出的答案是正确的,但我只想添加以下内容。试图将 C# 一对一地翻译成 F# 是错误的。不要这样做,否则您将不可避免地陷入与当前绑定一样的困境。相反,请查看您尝试解决的实际问题,而不是某些语言的特定技术细节。在这种情况下:“实际问题”是“报告错误”,“技术细节”是“按引用参数”。
标签: f# functional-programming pass-by-reference out ref