F # и утиная типизация

Допустим, я определил в 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 .

15
задан devoured elysium 15 August 2011 в 14:13
поделиться