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

F# 联合类型Union Cases转换函数编译报错如何解决

F# 函数编译错误修复方案

错误根源

  1. 类型不匹配:ApprovedWorkTime.ExistingWorkTime 联合类型分支要求接收 WorkTime 类型的入参,你在第一个匹配分支中传入了一个新构造的仅含Start、End字段的记录,由于你定义的三个记录类型字段结构完全一致,编译器将该记录推断为FixedWorkTime类型,和要求的WorkTime类型不匹配,触发报错。
  2. 语法错误:F# 中构造记录的字段分隔符为分号;,你使用了逗号,,逗号在F#中用于构造元组,属于语法错误。

修复代码

最简化写法:

let FixWorkTime (workTime: WorkTime) : ApprovedWorkTime =
    match workTime with
    // 直接传入原workTime即可,本身就是合法的WorkTime类型
    | WorkTime.Workshop _ -> ApprovedWorkTime.ExistingWorkTime workTime
    | WorkTime.Mounting mounting -> 
        ApprovedWorkTime.FixedWorkTime { Start = mounting.Start; End = mounting.End }

如果需要显式构造对应类型,可以写为:

let FixWorkTime (workTime: WorkTime) : ApprovedWorkTime =
    match workTime with
    | WorkTime.Workshop workshop -> 
        ApprovedWorkTime.ExistingWorkTime (WorkTime.Workshop workshop)
    | WorkTime.Mounting mounting -> 
        ApprovedWorkTime.FixedWorkTime { Start = mounting.Start; End = mounting.End }

内容的提问来源于stack exchange,提问作者Alexander Zeitler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:05