我的第一个F#日。如果我有这个:
let cat = Animal()
现在如何在cat
is
Animal
后检查?
在C#中
bool b = cat is Animal;
在F#?
答案 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;的工作原理。