Допустим, я определил в F # следующие два типа:
type Dog = { DogName:string; Age:int }
type Cat = { CatName:string; Age:int }
Я ожидал, что следующий метод подойдет и для кошек, и для собак:
let isOld x = x.Age >= 65
На самом деле, похоже, что isOld
будет принимать только кошек:
let dog = { DogName = "Jackie"; Age = 4 }
let cat = { CatName = "Micky"; Age = 80 }
let isDogOld = isOld dog //error
Я надеялся, что F # будет достаточно умен, чтобы определить своего рода "виртуальный" интерфейс X
для кошек и собак, чтобы isOld
мог принять X в качестве аргумента вместо Cat
.
Это не то, что F # будет обрабатывать при любых обстоятельствах, я прав? Похоже, что система логического вывода типа F # не будет делать ничего большего, чем то, что делает C # с var
типизированными переменными.