我的第一个 F# 日。如果我有这个:
let cat = Animal()
现在我如何在后期检查 if cat
is
Animal
?
在 C# 中
bool b = cat is Animal;
在 F# 中?
我的第一个 F# 日。如果我有这个:
let cat = Animal()
现在我如何在后期检查 if cat
is
Animal
?
在 C# 中
bool b = cat is Animal;
在 F# 中?
@ildjarn 在这里首先回答值得称赞,但我在这里提交答案以便可以接受。
is
C#关键字的 F# 等效项是:?
. 例如:
let cat = Animal()
if cat :? Animal then
printfn "cat is an animal."
else
printfn "cat is not an animal."
仅用于演示(不要定义is
函数):
let is<'T> (x: obj) = x :? 'T
type Animal() = class end
type Cat() = inherit Animal()
let cat = Cat()
cat |> is<Animal> //true
我知道我迟到了。如果您尝试在 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> 有效的。