首页 > 解决方案 > 返回元组的 F# 链接函数

问题描述

我是 F# 的新手,正在尝试链接函数以创建高阶函数。

一个简化的例子是

init返回一个元组

validate接受一个元组并返回bool

    let init : string * string =
        ("1", "2")

    let validate ((a: string), (b: string)) : bool =
        a.Equals(b)

    let test = init >> validate

错误

This expression was expected to have type 'a -> 'b' but here has type 'string * string'

标签: f#

解决方案


正如 Piotr 的答案所解释的,您收到错误是因为您有一个值和一个函数。要组合它们,你可以init变成一个函数,但在这种情况下你真的不需要使用组合。

如果要将值作为参数传递给函数,通常将其作为参数传递要简单得多:

let res = validate init

或者,如果您想按顺序将多个函数应用于输入,则可以使用管道运算符执行此操作:

let res = init |> validate

使用函数组合>>是一个很好的函数技巧,但我认为它在标准 F# 代码中实际上比大多数人想象的要少得多。我|>一直在使用,但>>很少使用。


推荐阅读