在F#中,如何更新可选的嵌套记录?
(新手问题) 我一直在努力用F#中的选项更新嵌套记录。这是怎么做到的 请假定:在F#中,如何更新可选的嵌套记录?,f#,F#,(新手问题) 我一直在努力用F#中的选项更新嵌套记录。这是怎么做到的 请假定: module Visit = type Model = { Id: int Name: string } let initWithTime (t:DateTime) = { Id = 0 Name = sprintf "Time is %A"
module Visit =
type Model =
{
Id: int
Name: string
}
let initWithTime (t:DateTime) =
{
Id = 0
Name = sprintf "Time is %A" t
}
module Cell =
type Model =
{
Id: int
Visit: Visit.Model option
}
let setVisitFromInteger (i:int, m:Model) =
let appointmentTime =
DateTime.Today + TimeSpan.FromMinutes(float i)
{ m with Visit = { m.Visit
match m.Visit with
| Some x -> x with Name = sprintf "New appointment time %A" appointmentTime
| None -> Visit.initWithTime appointmentTime
}
}
显然,setVisitFromInteger是完全错误的。嵌套的可选记录如何正确更新
TIA我想你只是对语法有点困惑。这是一个正确的版本:
开放系统
模块访问=
类型模型=
{
Id:int
名称:string
}
让initWithTime(t:DateTime)=
{
Id=0
Name=sprintf“时间是%A”t
}
模块单元=
类型模型=
{
Id:int
访问:访问.模型选项
}
开放式细胞
让setVisitFromInteger(i:int,m:Model)=
让预约时间=
DateTime.Today+TimeSpan.FromMinutes(浮点i)
{m与
拜访=
匹配m.访问
|某些x->{x的名称为sprintf“新约会时间%A”appointmentTime}
|无->访问.initWithTime预约时间
|>一些
}
请注意,记录更新表达式中的Visit
是一个选项,而不是记录,因此它不需要记录语法。但是,模式匹配中需要记录语法,因为您正在尝试执行嵌套的记录更新表达式