【问题标题】:F# Function with parameter constraints带参数约束的 F# 函数
【发布时间】:2009-06-04 08:37:46
【问题描述】:

我在 hubfs 上遇到了类似于 this 论坛帖子的错误,它解决了我的问题,但引发了一些关于该线程中代码的问题。

让测试 x = printfn "n" 让 finall x = x : 'a -> 单位 让 i x = finall 测试 x

有人可以向我解释一下第 2 行正在完成什么吗? 我看到finall的类型是

finall: ('a -> unit) -> ('a -> unit)

所以它只是一个接受一个函数并返回该函数的函数。 执行第 2 行和第 3 行的原因是什么? 以后能不能给finall定义一个函数体? 看来您不必在第三行加上括号,这是第 2 行的结果吗?

【问题讨论】:

    标签: f#


    【解决方案1】:

    是的,那个线程上的代码没有多大意义。 'finall' 基本上是恒等函数(让 id x = x),除了它将其参数限制为函数返回单元而不是某个任意值。基本上它没有做任何有用的事情,您可以轻松编写

    let test x = printfn "n"
    let i x = test x
    

    我认为这个 sn-p 可能来自一个人,他从一个他们不理解的错误消息开始,并试图将其简化为一个微小的示例重现。

    (关于函数调用,在 F# 中调用 let-bound 函数永远不需要括号:

    f x
    

    是一个调用,函数应用程序以正常的方式工作,支持柯里化,这意味着

    f x y
    

    意思

    (f x) y
    

    这就是“finall test x”行上发生的事情。)

    【讨论】:

    • 谢谢,这就是我要找的!
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多