gpt4 book ai didi

f# - 枚举与非成员歧视工会

转载 作者:行者123 更新时间:2023-12-03 21:40:17 25 4
gpt4 key购买 nike

我刚刚注意到声明非成员歧视工会只有一点点区别:

type Color =
| Red
| Green
| Blue

并声明一个枚举:
type Color =
| Red = 0
| Green = 1
| Blue = 2

它们在性能、使用等方面的主要区别是什么?你有什么建议什么时候用什么?

最佳答案

枚举是结构,因此分配在堆栈上,而区分联合是引用类型,因此是堆分配的。因此,您会期望 DU 的性能略低于枚举,但实际上您可能永远不会注意到这种差异。

更重要的是,可区分联合只能是声明的类型之一,因为枚举实际上只是一个整数,因此您可以将一个不是枚举成员的整数强制转换为枚举类型。这意味着当模式匹配时,编译器可以断言模式匹配已完成,当您涵盖了 DU 的所有情况时,但对于枚举,您必须始终放入默认捕获所有其余情况,即对于您的枚举'总是需要模式匹配,如:

match enumColor with
| Red -> 1
| Green -> 2
| Blue -> 3
| _ -> failwith "not an enum member"

最后一种情况对于 DU 是不必要的。

最后一点,由于 C# 和 VB.NET 都原生支持枚举,而 DU 不支持枚举,因此在创建公共(public) API 以供其他语言使用时,枚举通常是更好的选择。

关于f# - 枚举与非成员歧视工会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9125782/

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