当前位置:  开发笔记 > 编程语言 > 正文

F#让绑定模式

如何解决《F#让绑定模式》经验,为你挑选了2个好方法。

这个问题在stackoverflow中并不新鲜,但我无法理解let与模式和in关键字绑定的行为.我的教科书更喜欢不常见的函数定义格式:

let foo = fun x -> let f = (fun x y -> x +y ) in f x    

所以我翻译了#light语法:

let foo x =
    let f y =
        x + y
    f x

如果我设置foo 4它返回我8.为什么?我无法理解函数内部实际发生了什么,即使这里有优雅的解释.为什么4成为双方争论xy



1> Gus..:

你正在另一个函数中定义一个函数,你的内部函数f从外部函数中捕获一个值x,x + y因此使用的值x变为4.

然后你调用f x传递xy4 的内部函数.

另一种查看它的方法,没有考虑具体的值4,你的内部函数是,let f y = x + y但它总是被调用,x所以y变成了x,然后你的函数就变成了类似的东西let f a = a + a.

理解这一点的关键是在这种情况下,函数可以从上下文中捕获值x.

因此,这解释了使用light语法的函数的行为,但您可能想知道为什么它与单行版本不同.这是因为翻译错了.这是正确的翻译:

let foo x =
    let f x y = 
        x + y
    f x

现在,如果你用foo 4它调用它,则返回一个期望另一个参数的函数.



2> CodeMonkey..:

假设我们用4调用函数foo.

let foo x =
    let f y =
        x + y
    f x

foo 4

我们可以用4 替换所有的foo 4功能foo替换x.

let f y =
    4 + y

f 4

现在,我们可以替换f 4使用功能fy := 4.

4 + 4

这显然是8.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有