Скажем, я определил в 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 # не будет делать ничего, кроме того, что делает С# с переменными var
.