我有一段漂亮的F#代码,将Pizza映射到PizzaModel:
type Cheese = Cheese of string
type Pizza
{
Name: string
Cheese: Cheese
}
type PizzaModel =
{
PizzaName : string
Cheese: string
Toppings: string
}
let mapPizza pizza =
let (Cheese c) = pizza.Cheese
{ PizzaName = pizza.Name; Cheese = c}
是否可以写出不同的文字,我可以将奶酪解开包装吗?
答案 0 :(得分:3)
我花了一些时间弄清楚您的类型定义可能是什么。我让您的代码可以与以下代码一起编译,所以我假设这就是您的代码:
type Cheese = Cheese of bool
type CheesePizza = { PizzaName : string; Cheese : bool }
type Pizza = { Name : string; Cheese : Cheese}
我认为无法在函数的最后一行解开内联的奶酪,但是您可以在第一行的模式中解开名称和奶酪:
let mapPizza { Cheese = Cheese c; Name = name } =
{ PizzaName = name; Cheese = c}
此模式与参数匹配,并使用嵌套模式提取奶酪。
编辑,另一种方法是修改Cheese
类型并添加一个使您可以轻松访问包装值的成员。这很容易做到:
type Cheese =
| Cheese of string
member x.Value = let (Cheese v) = x in v
现在,您可以使用pizza.Cheese.Value
内联解包值:
let mapPizza pizza =
{ PizzaName = pizza.Name; Cheese = pizza.Cheese.Value }