【发布时间】:2021-03-06 06:40:41
【问题描述】:
我正在编写一个 F# 程序来管理项目列表。所有物品都有名称和价格。食品有保质期,非食品有保质期。我第一次尝试为这个领域建模是这样的:
type Info = {Name : string; Price : decimal;}
type Item =
| Food of Info * DateTime
| NonFood of Info * TimeSpan
let increasePrice item diff =
let modifyPrice info =
{info with Price = info.Price + diff}
match item with
| Food (info,expirationDate) -> Food ( modifyPrice info,expirationDate)
| NonFood (info,warranty) -> NonFood ( modifyPrice info,warranty)
但我不确定这是否是正确的做法。正如您所看到的,这是使用一个(抽象)基类和两个派生子类的 OO 概念建模的。我对 increasePrice 函数必须区分 Items 的两种类型这一事实特别不满意,尽管它只修改了 Item 的一般属性。
是否有更好的方法来使用另一种方法来设计这样的项目列表?
【问题讨论】:
标签: f#