当我只声明一个选项参数时,为什么需要提供两个选项参数?
我声明了以下类型:
type MiddleName = MiddleName of string option
Run Code Online (Sandbox Code Playgroud)
为了使编译器满意,我必须提供两次Some case值:
let middleName = Some <| MiddleName (Some "Kevin")
Run Code Online (Sandbox Code Playgroud)
注意:我希望只提供一些案例值.
因此,我认为我应该这样做:
let middleName = MiddleName (Some "Kevin")
Run Code Online (Sandbox Code Playgroud)
我甚至这样做了吗?因此,中间名应该是可选的,因此,我试图对其进行建模.
附录:
type FirstName = FirstName of string
type LastName = LastName of string
type MiddleName = MiddleName of string option
type MaidenName = MaidenName of string option
type Email = Email of string
type Phone = Phone of string
type Name = {
FirstName:FirstName
LastName:LastName
MiddleName:MiddleName option
MaidenName:MaidenName option
}
let someName = {
FirstName=FirstName "Scott"
LastName= LastName "Nimrod"
MiddleName = Some <| MiddleName (Some "Kevin")
MaidenName = None
Run Code Online (Sandbox Code Playgroud)
}
您已声明MiddleName类型是可选字符串,但您也已将您的MiddleName成员声明为可选的.所以你有一个MiddleName包含可选字符串的可选项.
其中一个optional后缀不是必需的.请注意,这也适用MaidenName.
您可以从这样的成员中删除该选项(请参阅此小提琴):
type Name =
{ FirstName : FirstName
LastName : LastName
MiddleName : MiddleName
MaidenName : MaidenName }
let someName =
{ FirstName = FirstName "Scott"
LastName = LastName "Nimrod"
MiddleName = MiddleName (Some "Kevin")
MaidenName = MaidenName None }
Run Code Online (Sandbox Code Playgroud)
或者像这样的MiddleName/ MaidenName类型(见这个小提琴):
type MiddleName = MiddleName of string
type MaidenName = MaidenName of string
type Name =
{ FirstName : FirstName
LastName : LastName
MiddleName : MiddleName option
MaidenName : MaidenName option }
let someName =
{ FirstName = FirstName "Scott"
LastName = LastName "Nimrod"
MiddleName = Some (MiddleName "Kevin")
MaidenName = None }
Run Code Online (Sandbox Code Playgroud)