17

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

let cat = Animal()

现在我如何在后期检查 if cat is Animal

在 C# 中

bool b = cat is Animal;

在 F# 中?

4

3 回答 3

26

@ildjarn 在这里首先回答值得称赞,但我在这里提交答案以便可以接受。

isC#关键字的 F# 等效项是:?. 例如:

let cat = Animal()
if cat :? Animal then
    printfn "cat is an animal."
else
    printfn "cat is not an animal."
于 2013-05-21T19:29:51.433 回答
9

仅用于演示(不要定义is函数):

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

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

let cat = Cat()
cat |> is<Animal> //true
于 2013-05-21T19:15:43.813 回答
4

我知道我迟到了。如果您尝试在 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> 有效的。

于 2017-05-29T18:52:34.557 回答