假设我在F#中定义了以下两种类型:
type Dog = { DogName:string; Age:int }
type Cat = { CatName:string; Age:int }
Run Code Online (Sandbox Code Playgroud)
我期待以下方法适用于猫和狗:
let isOld x = x.Age >= 65
Run Code Online (Sandbox Code Playgroud)
实际上,似乎isOld只会接受猫:
let dog = { DogName = "Jackie"; Age = 4 }
let cat = { CatName = "Micky"; Age = 80 }
let isDogOld = isOld dog //error
Run Code Online (Sandbox Code Playgroud)
我希望F#足够聪明,可以X为猫和狗定义某种"虚拟"界面,这样就isOld可以接受X作为参数,而不是a Cat.
这不是F#在任何情况下处理的事情,我是对的吗?似乎F#类型的推理系统不会做任何比C#对var类型变量做的更多的事情.