当前位置: 首页 > news >正文

【F#学习】可区分联合 Discriminated Unions

可区分联合是一串固定的项目。使用type| 来声明。将每一个项目称为一个case

type Season =| Spring  // Spring 就是一个 case| Summer| Autumn| Winter

可区分联合的每一个case都可以附加一些数据,不同的case可以附加不同类型的数据。当然,如果每一个case都没有附加数据,那这个可区分联合其实就和C#中的枚举enum区别不大了。

type Number =| Integer of int| Float of float| Invalid

为了创建一个可区分联合的实例,直接引用该case的名称即可。但是当两个可区分联合中出现了相同的项目的时候,需要使用全称。

type Number =| Integer of int| Float of float| Invalidtype Result =| Message of string| ErrorCode of int| Invalidlet byShortName = Integer 2
let byFullName = Number.Invalid

可区分联合可以判断是否相等。当且仅当二者是相同的case且具有相同的附带值的时候,二者相等。

你可以使用if/elif/else来判断,不过更推荐的方法是使用模式匹配。

let describe number =match number with| Integer i -> sprintf "Integer: %d" i| Float d  -> sprintf "Float: %f" d| Invalid   -> "Invalid"
http://www.jsqmd.com/news/2044/

相关文章:

  • Midscene.js - 开源的 AI 操作助手 - 广东靓仔
  • 详细介绍:【Datawhale25年9月组队学习:llm-preview+Task1:大模型介绍与环境配置】
  • Git仓库ssh不同环境配置
  • 超大附件怎么发送的高效解决方案与技巧
  • dm sql 缓存区
  • 给国外传输大文件的最佳策略与解决方案
  • idea mvn package 报错java head space/ java.lang.OutOfMemoryError: Java heap space
  • 大环境不好,这几个赚钱网站可以试试
  • Day20类与对象的小结
  • 克服getLocation获取当前的地理位置,报错:getLocation:fail auth deny及方法封装
  • 电流探头的测试原理
  • 第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)
  • Neo4j常用的语句记录
  • p1-1002
  • Model Context Protocol (MCP) 完整协议流程详解
  • Java中 String、StringBuilder 和 StringBuffer 的区别? - 指南
  • 常用的 HTTP 请求方法和区别
  • C#和Lua相互访问 - 详解
  • jemter 安装
  • Day20创建对象内存分析
  • 熬夜三天!SpringCloud Gateway 动态路由失效,背后黑手竟是它……
  • 解析 Authenticode 部分代码。
  • cmd 执行git bash 命令
  • 实用指南:力扣2132. 用邮票贴满网格图
  • 安全向量模板类SiVector - 实践
  • ONCHAINID源码分析(二)
  • 最佳三维文件格式,以及怎么在线浏览编辑FBX/OBJ/GLB/GLTF
  • ChatGPT 在招聘诈骗领域的应用
  • FR报表下拉框高度(JS添加css样式方式)调整
  • 基于Python+Vue开发的新闻管理系统源码+运行步骤