【发布时间】:2014-12-28 07:48:29
【问题描述】:
在 F# 中编写这样的函数有什么区别...
let add x y = x + y
或者这个……
let add = fun x y -> x + y
当我查看 IL 时,它们似乎生成完全相同类型的 IL。它们当然“似乎”在做同样的事情,但从概念上讲,我觉得它们是不同的,第一个是函数声明,第二个是值声明,其中“值”是一个函数。
此外,如果我们能做一个更详细的例子..
这...
let add x =
let rnd = System.Random()
let rnd = rnd.Next(100)
x + rnd
...与此相比
let add =
let rnd = System.Random()
let rnd = rnd.Next(100)
(fun x -> x + rnd)
这些示例遵循与前两个相同的原则,但是这两个的工作方式将大相径庭..
【问题讨论】:
-
System.Random 构成副作用,因此您会看到差异。
标签: function lambda f# closures