F # эквивалент ключевого слова `is` в С#?
Мой первый день F #. Если у меня есть это:
let cat = Animal()
Теперь, как я могу проверить на более позднем этапе, если cat
is
Animal
?
В С#
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> .