Теперь, как я могу проверить на более позднем этапе, если catisAnimal?
В С#
bool b = cat is Animal;
В F #?
Ответ 1
@ildjarn заслуживает кредита здесь для ответа сначала, но я подаю ответ здесь, чтобы его можно было принять.
Соответствие F # ключевого слова С# is:?. Например:
let cat = Animal()
if cat :? Animal then
printfn "cat is an animal."
else
printfn "cat is not an animal."
Ответ 2
Только для демонстрации (не определяйте функцию is):
let is<'T> (x: obj) = x :? 'T
type Animal() = class end
type Cat() = inherit Animal()
let cat = Cat()
cat |> is<Animal> //true
Ответ 3
Я знаю, что опаздываю. Если вы попытаетесь проверить тип коллекции в fsi с помощью:?
он выдаст ошибку, если типы элементов не совпадают. Например.
let squares = seq { for x in 1 .. 15 -> x * x }
squares :? list<int> ;; // will give false
squares :? list<string> ;; // error FS0193: Type constraint mismatch
Обертка в такой функции, как Daniels, работает <T> .