You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F# doTransfer异步函数报错:if表达式需为unit类型当前为bool

错误原因

F# 语法要求:无else分支的if表达式必须返回unit类型,因为条件不命中时该表达式无输出值,只能对应无返回值的操作。你在then分支使用return false属于async计算表达式的返回控制语句,导致整个if表达式的类型不符合unit要求,因此触发类型校验错误。

解决方法

给每个单分支if补充else ()即可,()是F#中的unit类型值,补充后符合语法要求,也不影响你提前终止函数返回false的逻辑。
如果要更符合F#编码习惯,也可以把xx = false简化为not xx判断。

注:原代码中doTransfer函数内后续异步调用重复写了clickTransferTab属于笔误,实际使用时可替换为对应业务函数即可。

修正后的完整代码

let clickTransferTab (page: IPage, dataId: string) = async {
    try 
        // Click Transfer tab
        let! selector = Async.AwaitTask(page.WaitForSelectorAsync("div[data-id='"+dataId+"'] a.t3"))
        do! Async.AwaitTask(selector.ClickAsync())
        return true
    with ex ->
        return false
}

let doTransfer (page: IPage,
                dataId: string,
                transferAmount: string,
                bankAccountText: string) = async {
    try
        let! clickTransferResult = clickTransferTab(page,dataId) 
        if not clickTransferResult then return false else ()
        
        let! selectBankresult = clickTransferTab(page,dataId) 
        if not selectBankresult then return false else ()

        let! enterTransferResult = clickTransferTab(page,dataId) 
        if not enterTransferResult then return false else ()

        let! reconcilResult = clickTransferTab(page,dataId) 
        if not reconcilResult then return false else ()

        return true
    with ex ->
        return false
}

内容的提问来源于stack exchange,提问作者Martin Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:15:04