如何在 F# 中编写枚举而不显式分配数字文字?

2024-03-23

我在 F# 中有一个枚举,如下所示:

type Creature =
   | SmallCreature = 0
   | MediumCreature = 1
   | GiantCreature = 2
   | HumongousCreature = 3
   | CreatureOfNondescriptSize = 4

我不喜欢手动输入数字,并且希望稍后可以轻松地在枚举中插入更多项目,而无需移动数字。

我试过这个

type Creature =
   | SmallCreature
   | MediumCreature
   | GiantCreature
   | HumongousCreature
   | CreatureOfNondescriptSize

但这导致了错误The type 'Creature' is not a CLI enum type稍后在节目中

let input = Int32.Parse(Console.ReadLine())
let output = match EnumOfValue<int, Creature>(input) with // <---Error occurs here
    | Creature.SmallCreature -> "Rat"
    | Creature.MediumCreature -> "Dog"
    | Creature.GiantCreature -> "Elephant"
    | Creature.HumongousCreature -> "Whale"
    | Creature.CreatureOfNondescriptSize -> "Jon Skeet"
    | _ -> "Unacceptably Hideous Monstrosity"

Console.WriteLine(output)
Console.WriteLine()
Console.WriteLine("Press any key to exit...")
Console.Read() |> ignore

如何定义枚举而不手动为每个项目分配数值?


不幸的是,你不能。数值重要吗?如果是这样,它在某种程度上就逃脱了枚举的预期用途(除了标志)。在这种情况下,您可能会考虑阶级或歧视工会。

事实上,你的第二个例子是一个受歧视的工会。但你以后使用EnumOfValue需要枚举,导致了错误。

另一种选择是将枚举到数字的映射存储在字典中,并用字典查找替换模式匹配。那么,枚举的数值就无关紧要了。

我同意手动管理枚举值是很繁重的。我希望它能在未来的版本中得到解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 F# 中编写枚举而不显式分配数字文字? 的相关文章

随机推荐

  • 从 Dictionary 迁移到 ConcurrentDictionary,我应该注意哪些常见陷阱?

    我正在考虑从 Dictionary 迁移到 ConcurrentDictionary 以实现多线程环境 具体到我的用例 kvp 通常是
  • 超出内部响应标头大小限制

    当我重定向到相关网站的其他部分时 会发生此错误 return this RedirectToActionPermanent Index Dashboard 在错误发生之前 代码不会单步执行仪表板控制器中的 Index 方法 我认为发布的 F
  • grpc go:如何在服务器端知道客户端何时关闭连接

    我正在使用 grpc go 我有一个 rpc 看起来大致像这样 196 service MyService 197 Operation 1 198 rpc Operation1 OperationRequest returns Operat
  • 将两列添加到 vba 用户窗体组合框

    我有一个用于库存控制的用户表单 用于进出物品 我想做的就是修改下面的代码以在其代码旁边显示每个物品名称以进行搜索物品 代码 Private Sub ComboBox1 Click Dim i As Integer Dim j As Inte
  • 从 http 服务流式传输大文件

    我正在编写一个组件来从 HTTP 服务传输大数据 4 GB 该组件采用 URL 和目标流 目标流可以是文件流 也可以是 POSTS 到不同 HTTP 服务的流 甚至两者都是 作为组件的作者 我需要执行以下步骤直到完成 从 HTTP 流中读取
  • R闪亮制作子面板

    是否有一个简单的解决方案可以使 R 中创建的主选项卡面板中的选项卡面板闪亮 以下是我创建主面板的方法 mainPanel tabsetPanel id tabSelected tabPanel Tab1 uiOutput Tab1 tabP
  • 用于数据存储的 Lua 与 XML

    我们中的许多人都被灌输了使用 XML 来存储数据的观念 它的优点和缺点众所周知 我当然不想在这里讨论它们 然而 在我用 C 编写的项目中 我也使用 Lua 我非常惊讶 Lua 能够如此出色地存储和处理数据 然而 Lua 的这一方面却鲜为人知
  • 在UIPickerView而不是UIView中响应touchesBegan

    我有一个 UIPickerView 在不使用时会淡出至 20 alpha 我希望用户能够触摸选择器并使其淡入 如果我在主视图上放置一个 TouchBegan 方法 我就可以让它工作 但这仅在用户触摸视图时才有效 我尝试对 UIPickerV
  • 使用 join 获取嵌套对象数组的 SQL 查询

    摘要 我将从 JSON 模式开始来描述期望 请注意具有嵌套对象数组的角色 我正在寻找一个可以通过单个查询获取它的 智能查询 id 1 first John roles Expectation gt array of objects id 1
  • 使用 WPF WebBrowser 控件时如何抑制脚本错误?

    我有一个 WPF 应用程序 它使用 WPF WebBrowser 控件在平面显示器上向开发人员显示有趣的网页 如新闻源 问题是我偶尔会遇到 HTML 脚本错误 该错误会弹出一条令人讨厌的 IE 错误消息 询问我是否要 停止在此页面上运行脚本
  • 如何在数据表中格式化货币?

    This is a table which display transactions implementes using DataTables https datatables net document ready function var
  • 为什么 html() 执行 JavaScript,而innerHTML 不执行?

    为什么这个会执行
  • 如何在 Xamarin Forms 中显示 ToolBarItem 图标的徽章计数

    它不是关于如何显示通知徽章 也不是关于显示工具栏项目图标 如何在工具栏项目图标上显示徽章计数是一个明显的问题 我正在共享代码以在 XF 内容页面中创建带有图标的 ToolbarItem 在cs文件中 ToolbarItem cartItem
  • 如何使用 python (requests/urllib3) 登录 facebook?

    我正在尝试使用http docs python requests org en latest http docs python requests org en latest 自动登录 Facebook s requests session
  • 如何递归地对特定数组键的所有值求和?

    我有一个像这样的数组 Array 1000 gt Array pv gt 36 1101 gt Array 1102 gt Array pv gt 92 pv gt 38 pv gt 64 如何找到带有键 pv 的所有数组元素的总和 无论它
  • PHP:自引用数组

    有没有办法从数组中引用数组键 这在代码格式中可能更有意义 array array Key1 gt array Value1 Value2 Key2 gt this Key1 我想要的是为了 array Key2 输出与 array Key1
  • 如何优化像素艺术编辑器中的绘制区域

    我有像素艺术创作程序 并且画布上有矩形 它们是一个字段 像素 对于数据量不大 例如 128x128 来说 这是一个很好的解决方案 如果我想在画布上创建 1024x1024 矩形 这个过程会很长 RAM 使用量约为 1 2 GB 之后程序运行
  • 带参数的累积正态分布函数的反函数

    我想在 C 中实现与 matlab icdf 函数等效的功能 我已经找到了这篇有用的文章 https www johndcook com blog cpp phi inverse https www johndcook com blog c
  • Pyspark AWS 凭证

    我正在尝试运行一个 PySpark 脚本 当我在本地计算机上运行它时 它可以正常工作 问题是我想从 S3 获取输入文件 无论我如何尝试 我似乎都无法找到设置 ID 和秘密的位置 我找到了一些有关特定文件的答案 前任 通过 Spark 或更好
  • 如何在 F# 中编写枚举而不显式分配数字文字?

    我在 F 中有一个枚举 如下所示 type Creature SmallCreature 0 MediumCreature 1 GiantCreature 2 HumongousCreature 3 CreatureOfNondescrip