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

naw*_*fal 13 f# types language-comparisons keyword

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

let cat = Animal()
Run Code Online (Sandbox Code Playgroud)

现在我如何在以后检查cat is Animal

在C#中

bool b = cat is Animal;
Run Code Online (Sandbox Code Playgroud)

在F#?

Jac*_* P. 25

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

C#is关键字的F#等价物是:?.例如:

let cat = Animal()
if cat :? Animal then
    printfn "cat is an animal."
else
    printfn "cat is not an animal."
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 8

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

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

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

let cat = Cat()
cat |> is<Animal> //true
Run Code Online (Sandbox Code Playgroud)

  • 它被称为前向管道操作员.它将左侧的操作数应用为右侧函数的最后一个参数.([见MSDN](http://msdn.microsoft.com/en-us/library/ee340273.aspx)) (2认同)
  • @sacha:鉴于有一个内置的类型测试运算符(`:?`),`is <'T>`没有提供太多的价值.比较`cat is <Animal>`和`cat :? Animal`. (2认同)
  • 你是对的.它需要翻译,即读取":"作为"是" - 与读取">"大于"大于"相同. (2认同)