作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚注意到声明非成员歧视工会只有一点点区别:
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"
关于f# - 枚举与非成员歧视工会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9125782/
我是一名优秀的程序员,十分优秀!