F#相当于C#中的`is`关键字?

时间:2013-05-21 18:48:54

标签: types f# keyword language-comparisons

我的第一个F#日。如果我有这个:

let cat = Animal()

现在如何在cat is Animal后检查?

在C#中

bool b = cat is Animal;

在F#?

3 个答案:

答案 0 :(得分:23)

@ildjarn值得在此处回答,但我在这里提交的答案是可以接受的。

C#is关键字的F#等价物为:?。例如:

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

答案 1 :(得分:8)

仅限演示(不要定义is功能):

let is<'T> (x: obj) = x :? 'T

type Animal() = class end
type Cat() = inherit Animal()

let cat = Cat()
cat |> is<Animal> //true

答案 2 :(得分:3)

我知道我迟到了。如果您尝试使用以下方法测试fsi中集合的类型:? 如果项目类型不匹配,它将给出错误。 E.g。

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这样的功能包装是&lt;&gt; T&gt;的工作原理。