在 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)) } ]
在 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)) } ]