在F#中,如何更新可选的嵌套记录?

在F#中,如何更新可选的嵌套记录?,f#,F#,(新手问题) 我一直在努力用F#中的选项更新嵌套记录。这是怎么做到的 请假定: module Visit = type Model = { Id: int Name: string } let initWithTime (t:DateTime) = { Id = 0 Name = sprintf "Time is %A"

(新手问题)

我一直在努力用F#中的选项更新嵌套记录。这是怎么做到的

请假定:

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
是一个选项,而不是记录,因此它不需要记录语法。但是,模式匹配中需要记录语法,因为您正在尝试执行嵌套的记录更新表达式