在 F# 中,如何构造具有 DateTime 值的记录列表?

In F#, how to construct a record list with DateTime values?

在 F# 中,假设我有一个人记录为:

type person = 
   { LastName: string option
     BirthDate: System.DateTime option }

现在,我想创建一个包含 100 人的列表(这失败了。名称和 System.DateTime(...) 都不正确):

let people = [for a in 1 .. 100 
                do yield {
                            LastName= Some "LastName"+a 
                            BirthDate = System.DateTime(2012,11,27)
                          }]

这是怎么做到的?

TIA

代码有两个不同的问题,但您的总体方法很好!

首先,Some "LastName"+a被解释为(Some "LastName")+a,这不是正确的括号。另外 a 是一个 int 不能自动转换成 string,所以你需要显式转换它。正确的版本是 Some("LastName" + string a).

其次,System.DateTime(2012,11,27)DateTime,但你需要一个选项。您只需添加 Some 和右括号即可解决此问题,即 Some(System.DateTime(2012,11,27)).

作为奖励,您可以将 do yield 减少为 ->(这只是一种语法糖,可以缩短此类内容)。我会写:

open System

let people = 
  [ for a in 1 .. 100 ->
      { LastName= Some ("LastName"+string a) 
        BirthDate = Some(DateTime(2012,11,27)) } ]