检查几个选项类型,然后转换为类型
Check several option types and then convert to type
总的来说,我是一名新程序员,对于 F# 也是如此。我已经 运行 多次解决这个问题,但我认为还没有有效地解决它。问题是:
我有这些示例类型:
type Retail1 = | Fashion | Auto | Sports
type Wholesale1 = | Fashion | Auto | Sports
type Events1 = | Wedding | Birthday
type Product =
| Retail of Retail1 | Wholesale of Wholesale1 | Events of Events1
| NoProduct
我想通过函数将前三种类型的可能性转换为Product类型:
let convertToProduct (retail: Retail1 option)
(wholesale: Wholesale1 option) (events: Events1 option) =
// convert to Product here
if retail.IsSome then Retail retail
elif wholesale.IsSome then Wholsale wholseale
elif events.IsSome then Events events
else NoProduct
我在 pass 中处理它的方式只是将一个长的 if elif 语句链接在一起以检查每个条件和 return Product 的最终类型,但这感觉不正确,或者至少符合 F# 的习惯。解决此问题的推荐方法是什么?
这样的事情怎么样:
let convertToProduct (retail: Retail1 option) (wholesale: Wholesale1 option) (events: Events1 option) =
match (retail, wholesale, events) with
|Some rt, None, None -> Retail rt
|None, Some wh, None -> Wholesale wh
|None, None, Some ev -> Events ev
|_ -> NoProduct
这利用了以下事实:如果将所有参数转换为元组,则可以对结果进行非常简洁的模式匹配。
模式匹配实际上非常强大,您可以在 MSDN documentation.
中找到有关可以执行的模式匹配类型的更多详细信息
总的来说,我是一名新程序员,对于 F# 也是如此。我已经 运行 多次解决这个问题,但我认为还没有有效地解决它。问题是:
我有这些示例类型:
type Retail1 = | Fashion | Auto | Sports
type Wholesale1 = | Fashion | Auto | Sports
type Events1 = | Wedding | Birthday
type Product =
| Retail of Retail1 | Wholesale of Wholesale1 | Events of Events1
| NoProduct
我想通过函数将前三种类型的可能性转换为Product类型:
let convertToProduct (retail: Retail1 option)
(wholesale: Wholesale1 option) (events: Events1 option) =
// convert to Product here
if retail.IsSome then Retail retail
elif wholesale.IsSome then Wholsale wholseale
elif events.IsSome then Events events
else NoProduct
我在 pass 中处理它的方式只是将一个长的 if elif 语句链接在一起以检查每个条件和 return Product 的最终类型,但这感觉不正确,或者至少符合 F# 的习惯。解决此问题的推荐方法是什么?
这样的事情怎么样:
let convertToProduct (retail: Retail1 option) (wholesale: Wholesale1 option) (events: Events1 option) =
match (retail, wholesale, events) with
|Some rt, None, None -> Retail rt
|None, Some wh, None -> Wholesale wh
|None, None, Some ev -> Events ev
|_ -> NoProduct
这利用了以下事实:如果将所有参数转换为元组,则可以对结果进行非常简洁的模式匹配。
模式匹配实际上非常强大,您可以在 MSDN documentation.
中找到有关可以执行的模式匹配类型的更多详细信息