在类型

时间:2015-09-16 22:38:16

标签: f# f#-interactive f#-3.0

我正在学习F#并尝试创建一个名为Person的类型,具有4个属性。其中2个(母亲和父亲)是可选的,但不知何故我收到编译器错误。

type Person = {
    name : string;
    age : int;
    mother: Person option -> Person option;
    father: Person option -> Person option;
}

let defaultPerson = {
    name = ""; 
    age = 0; 
    mother = fun person -> person; 
    father = fun person -> person }

let displayPerson person =
    printfn "Name: %s, Age: %d" person.name person.age

let setName person name = 
    { person with Person.name = name }

let setAge person name = 
    { person with Person.name = name }

let setMother person mother = 
    { person with Person.mother = mother }

let setFather person father = 
    { person with Person.father = father }

但是当我尝试使用代码时,会抛出编译错误:

let mother1 = { 
    Person.name = "Angelica"; 
    age = 47; 
    mother = Option<Person>.None; //mother = None doesn't work 
    father = Option<Person>.None }

1 个答案:

答案 0 :(得分:3)

我不清楚为什么motherfather被定义为函数,但您可以使用fun关键字设置它们,你似乎已经发现了:

let mother1 = { 
    Person.name = "Angelica"; 
    age = 47; 
    mother = fun _ -> None;
    father = fun _ -> None }

以下是Person的更明智的定义吗?

type Person' = {
    Name : string;
    Age : int;
    Mother: Person' option;
    Father: Person' option;
}

这可以让你定义一个这样的值:

let mother2 = { 
    Name = "Angelica"; 
    Age = 47; 
    Mother = None;
    Father = None }