【发布时间】:2017-10-04 21:10:38
【问题描述】:
我有两种动物:
type Person(name) =
member this.Name: string = name
type Cat(age) =
member this.Age: int = age
我“加入”这些类型:
type Animal =
| Person of Person
| Cat of Cat
| Dog
当我尝试创建 Person 实例时:
let person = new Person("Alex")
我得到错误:
联合案例 Animal.Person: Person -> Animal
'string' 类型与'Person' 类型不兼容
问题:
Person 是一个带有构造函数的类,
Animal.Person 类型应该是Person 的实例。那么,有什么问题呢?
编辑: Visual Studio for Windows 不显示错误,但如果添加更多源代码,则会收到错误“'Person' does not match type 'Animal'”:
[<EntryPoint>]
let main argv =
let person = new Person("Alex")
person
|> KnowAnimal
|> printfn "%O"
【问题讨论】:
-
那么你的问题是什么。它不起作用的原因与它在您之前的问题中不起作用的原因相同。同样的解决方案也适用。请澄清。
-
@Gustavo "How" 在我之前的问题中,现在是 "why"。 Person 是一个带有构造函数的类,Animal.Person 类型应该是 Person 的一个实例。那么,有什么问题呢?
-
您确定您显示的代码正确吗?运行您的代码时,我没有收到任何错误消息 - 它运行良好。
-
let person: Animal = Person(new Person("Alex")) -
对,它有类型Person,而不是is。同样的区别:
type Value = Number of int | String of string,Number不是 int,它有一个 int。
标签: f#