当前位置: 首页 > 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.hskmm.com/?act=detail&tid=14415

相关文章:

  • 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类与对象的小结
  • 电流探头的测试原理
  • 第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)
  • Neo4j常用的语句记录
  • p1-1002
  • Model Context Protocol (MCP) 完整协议流程详解
  • 常用的 HTTP 请求方法和区别
  • 第七届机器学习、大数据与商务智能国际会议(MLBDBI 2025)
  • 【OpenCV】11 形态学操作
  • 安装与使用trex
  • 自建 Supabase 云服务与 BeeCount 云同步详解
  • CF2134 Codeforces Round 1045 (Div. 2) 游记(VP)
  • jemter 安装
  • Day20创建对象内存分析
  • 熬夜三天!SpringCloud Gateway 动态路由失效,背后黑手竟是它……
  • cmd 执行git bash 命令
  • 安全向量模板类SiVector - 实践
  • 最佳三维文件格式,以及怎么在线浏览编辑FBX/OBJ/GLB/GLTF
  • FR报表下拉框高度(JS添加css样式方式)调整
  • 基于Python+Vue开发的新闻管理系统源码+运行步骤
  • 鸿蒙应用开发从入门到实战(十二):ArkUI组件ButtonToggle
  • Spring框架中的注解主要有哪些