F#链式调用返回元组的函数时类型不匹配报错如何解决?
错误原因
>>是F#的函数组合运算符,仅支持对两个函数进行拼接,要求左侧函数的输出类型和右侧函数的输入类型完全匹配。- 你定义的
init是一个已实例化的元组值,不是函数,不符合运算符的入参要求,因此触发类型不匹配报错。
解决方案
根据你的使用场景二选一即可:
直接调用逻辑
如果你的init本身就是固定值,不需要延迟执行,直接把init作为参数传入validate即可:
let init : string * string = ("1", "2") let validate ((a: string), (b: string)) : bool = a.Equals(b) let test = validate init
保留函数组合逻辑
如果需要保留链式调用的函数组合写法,把init修改为接收unit参数的函数,让它符合函数类型要求:
// init 改为 unit -> string * string 类型的函数 let init () : string * string = ("1", "2") let validate ((a: string), (b: string)) : bool = a.Equals(b) // 组合后得到的test是 unit -> bool 类型的函数,调用时加()执行 let test = init >> validate // 执行示例 let runResult = test ()
内容的提问来源于stack exchange,提问作者SoonGuy
相关产品推荐
相关产品推荐

