这实际上是一个.NET问题,但我想知道答案是什么。我之前已经读过,闭包被编译成.NET类。
通常它取决于实现,但我会惊讶地发现这部分不会在VS2015中进行优化。
编辑:这个问题不是重复的,因为它不是在询问闭包是什么,而是关于它们的实现细节。
EDIT2:
let math_func a =
let mutable a = a
let add b = a <- a + b
let mult b = a <- a * b
let div b = a <- a / b
let ret () = a
add, mult, div, ret
let add, mult, div, ret = math_func 5
add 5
ret()
mult 4
ret()
div 2
ret()
这是一个简短的F#示例,所有函数都包含相同的变量。我可以想到更复杂的例子,但我在游戏项目中使用的而不是虚函数并没有那么复杂。
我从未真正意识到他们可以用面向对象编程取代多少,我想知道我能走多远。它们也很整洁,因为它们让我推迟考虑如何精确设计我的程序。