我是 F# 新手,正在尝试链接函数来创建高阶函数。
一个简化的例子是
init返回一个元组
validate接受一个元组并返回bool
let init : string * string =
("1", "2")
let validate ((a: string), (b: string)) : bool =
a.Equals(b)
let test = init >> validate
Run Code Online (Sandbox Code Playgroud)
错误
This expression was expected to have type 'a -> 'b' but here has type 'string * string'
正如 Piotr 的答案所解释的那样,您会收到错误,因为您有一个值和一个函数。要组合它们,您可以将其转换init为函数,但在这种情况下您实际上并不需要使用组合。
如果您想将值作为参数传递给函数,通常将其作为参数传递要简单得多:
let res = validate init
Run Code Online (Sandbox Code Playgroud)
或者,如果您想按顺序将多个函数应用于输入,则可以使用管道运算符来执行此操作:
let res = init |> validate
Run Code Online (Sandbox Code Playgroud)
使用函数组合>>是一个很好的函数技巧,但我认为它在标准 F# 代码中实际上比大多数人想象的要少得多。我|>一直使用,但>>很少使用。
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |