【发布时间】:2013-02-17 23:40:08
【问题描述】:
由于支持柯里化,F# 函数与普通 CLR 方法有很大不同。例如函数
let inc a = a + 1
类型为Microsoft.FSharp.Core.FSharpFunc<int,int>。它会产生 C# 互操作性问题。必须专门设计函数以便从 C# 中轻松调用。
这种设计背后的基本原理是什么?我相信原因是咖喱支持。但是柯里化可以使用闭包来实现。例如这段代码:
let add a b = a + b
let inc = add 1
可以很容易地被编译器转换成这个:
let add a b = a + b
let inc = fun x -> add 1 + x
在这种情况下 add 和 inc 都可以是普通的System.Func 对象。我相信这个设计决定背后有一些有趣的原因。
【问题讨论】:
-
向 Don Syme / F# 团队的其他人发送电子邮件可能会更好。虽然我有理由确定整个原因是为了柯里化,但对于更复杂的情况来说,这可能不是那么简单。
-
我相信 Don Syme 和其他 F# 团队成员也是 SO 用户。
-
Don Syme 不是,但 Tomas Petricek 是,Brian 也是 F# 团队的一员(我认为)。
-
@JohnPalmer 我很确定 Keith B. 也在这里。
标签: f#