F # эквивалент ключевого слова `is` в C #?

Мой первый день F #. Если у меня есть это:

let cat = Animal()

Теперь, как мне проверить на более позднем этапе, еслиcat is ?Animal

В C #

bool b = cat is Animal;

В F #?

 Jack P.21 мая 2013 г., 20:55
@ildjarn Вы должны добавить это в качестве ответа вместо комментария, чтобы его можно было принять.
 nawfal21 мая 2013 г., 21:03
@ildjarn спасибо, я знал, что это как-то связано с:?, но не получил правильный синтаксис!
 ildjarn21 мая 2013 г., 20:54
let b = cat :? Animal
 nawfal24 мая 2013 г., 17:50
@ PrzemysławLewandowski, да. Это мой собственный вопрос тоже.
 Przemysław Lewandowski22 мая 2013 г., 11:00
Вы можете сопоставить шаблон по типу тоже. Проверьте другой SO вопрос [здесь] [1]. [1]:stackoverflow.com/questions/16679503/...
 ildjarn21 мая 2013 г., 20:58
@Jack: на мобильном телефоне, чтобы я могдать подробный ответ. Не стесняйтесь. : -]

Ответы на вопрос(3)

Решение Вопроса

@ildjarn заслуживает похвалы за ответ первым, но яЯ отправляю ответ здесь, чтобы он мог быть принят.

F # эквивалент C #is ключевое слово:?, Например:

let cat = Animal()
if cat :? Animal then
    printfn "cat is an animal."
else
    printfn "cat is not an animal."

Только для демонстрации (неопределитьis функция):

let is is //true
 Daniel18 дек. 2014 г., 17:55
Вы'верно. Требуется перевод, то есть чтение:? как "является"-почти так же, как чтение> как "лучше чем."
 sacha17 дек. 2014 г., 16:55
Даниэль, почему быВы определяете как функцию, выглядит довольно полезным для меня?
 Daniel17 дек. 2014 г., 17:16
@Sacha: Учитывая, что тамs встроенный оператор проверки типа (:?),is
 sacha18 дек. 2014 г., 09:48
@ Даниель: Да, я думаю, я думаю, <T> Лично лучше читает, но, думаю, как только вы познакомитесь со всеми странными операторами FSharp, это нормально.
 nawfal21 мая 2013 г., 21:54
Даниэль, можешь сказать мне, что|> ? Зачем включать его перед вызовом функции? У него есть имя?
 Daniel21 мая 2013 г., 22:11
Это'называется оператором прямой трубы. Он применяет операнд слева в качестве последнего аргумента к функции справа. (см MSDN)

Я знаю я'м поздно. Если вы попытаетесь проверить тип коллекции в fsi с помощью:? это даст ошибку, если типы элементов не совпадают. Например.

let squares = seq { for x in 1 .. 15 -> x * x }  
squares :? list ;;   // will give false  
squares :? list ;; // error FS0193: Type constraint mismatch

Обертывание в функции, как Дэниелс это <'T> работает.

 nawfal24 мар. 2019 г., 06:33
В этом случае ошибка времени компиляции того стоит.

Ваш ответ на вопрос