【发布时间】:2018-12-30 16:39:29
【问题描述】:
假设我有这样的类型:
type Season =
| Spring
| Summer
| Autumn
| Winter
我想要一个返回下一季的函数next:
let next s =
match s with
| Spring -> Summer
| Summer -> Autumn
| Autumn -> Winter
| Winter -> Spring
我可以在两个地方放置这个函数。
在命名模块中:
module Season =
let next s =
match s with
| Spring -> Summer
| Summer -> Autumn
| Autumn -> Winter
| Winter -> Spring
或者作为类型上的静态成员:
type Season =
| Spring
| Summer
| Autumn
| Winter
with
static member next s =
match s with
| Spring -> Summer
| Summer -> Autumn
| Autumn -> Winter
| Winter -> Spring
支持每种方法的原因是什么?
【问题讨论】:
-
枚举可能更适合这种特定情况。如果你需要上一季怎么办?模块实际上只是 F# 中的名称间距结构,它适用于库函数(例如自动打开的 List),否则我会避免使用它。也就是说,它可以很好地用于域建模,并且您可能在 Season 上运行很多函数,其他语言通过能够在类型之外的类型上定义方法来解决它,但是模块可能适合您。太糟糕了,你不能接受两个答案。 :D
标签: f#