gpt4 book ai didi

f# - 如何在不显式分配数字文字的情况下在 F# 中编写枚举?

转载 作者:行者123 更新时间:2023-12-04 17:39:43 24 4
gpt4 key购买 nike

我在 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 ,它需要一个枚举,导致错误。

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

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

关于f# - 如何在不显式分配数字文字的情况下在 F# 中编写枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com