我有一段漂亮的F#代码,将比萨映射到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}有可能写这种不同的,我能打开奶酪的地方吗?
发布于 2018-08-11 20:09:20
我花了一些时间才弄清楚您的类型定义可能是什么。我让您的代码与以下内容一起编译,所以我假设这就是您所拥有的:
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 }https://stackoverflow.com/questions/51803099
复制相似问题