我有两种类型的动物:
type Person(name) =
member this.Name: string = name
type Cat(age) =
member this.Age: int = age
I"加入"类型:
type Animal =
| Person of Person
| Cat of Cat
| Dog
当我尝试创建Person实例时:
let person = new Person("Alex")
我收到错误:
Union case Animal.Person:Person - >动物
类型'字符串'与“人物”
类型不兼容
问题:
人是带有构造函数的类,
类型 Animal.Person 应该是 Person的实例。那么,问题是什么?
修改 Visual Studio for Windows不会显示错误,但是如果添加更多源代码,则会出现错误"' Person'不匹配' Animal'":
[<EntryPoint>]
let main argv =
let person = new Person("Alex")
person
|> KnowAnimal
|> printfn "%O"
答案 0 :(得分:2)
Animal.Person类型应该是Person的实例。那么,问题是什么?
首先Animal.Person
不是类型,Person
是类型,Animal
是类型。 Animal.Person
是以Animal
为参数的Person
类型的案例。也就是说,它作为Person -> Animal
类型的函数,因此它采用类型Person
的值并返回类型Animal
的值。这两种类型之间没有子类型关系。
因此person
是Person
类型的值,Person person
是类型Animal
的值,因为Person
需要Person
并返回Animal
。