F# 什么';工会是否推断(并创建)类型?
我有两种动物:F# 什么';工会是否推断(并创建)类型?,f#,F#,我有两种动物: 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") 我得到一个错误: 联合
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")
我得到一个错误:
联合案例动物。人物:人物->动物
类型“string”与类型“Person”不兼容
问题:
Person是一个带有构造函数的类
类型Animal.Person应该是Person的实例。那么,有什么问题
编辑:
Visual Studio for Windows不显示错误,但如果添加更多源,则会出现错误“'Person'与类型'Animal'不匹配”:
[]
让主argv=
let person=新人(“Alex”)
人
|>知性动物
|>printfn“%O”
类型Animal.Person应该是Person的一个实例。那么,有什么问题
首先,动物。人不是一种类型,Person
是一种类型,Animal
是一种类型Animal.Person
是Animal
类型的一种,它将Person
作为参数。也就是说,它作为类型Person->Animal
的函数,因此它接受类型Person
的值并返回类型Animal
的值。这两种类型之间没有子类型关系
所以
person
是类型person
的值,person-person
是类型Animal
的值,因为person
接受person
并返回Animal
,所以你的问题是什么。它不起作用的原因与你上一个问题中它不起作用的原因相同。同样的解决方案也适用。请澄清。@Gustavo在我上一个问题中的“如何”,现在是“为什么”。Person是一个具有构造函数的类,类型为Animal。Person应该是Person的实例。那么,有什么问题吗?你确定你显示了正确的代码吗?当我运行你的代码时,我没有收到任何错误消息-它工作正常。让person:Animal=person(newperson(“Alex”)
对,它的类型是person,而不是is。与此相同的区别是:type Value=int的数量| String of String
,Number
不是int,而是int。
[<EntryPoint>]
let main argv =
let person = new Person("Alex")
person
|> KnowAnimal
|> printfn "%O"