如何检查函数的类型参数是否静态解析?

时间:2013-05-01 22:42:49

标签: f# inline

非常简单的例子:

  1. let myfun x = x
    在intellisense中,它表示“x:'a - >'a”。在FSI中,它表示“x:'a - >'a”
  2. let inline myfun x = x
    在intellisense中,它表示“x:'a - >'a”。在FSI中,它表示“x:'a - >'a”<<<<<为什么不^a
  3. let inline myfun (x: 'b) = x
    在intellisense中,它表示“x:'b - >'b”。在FSI中,它表示“x:'b - >'b”
  4. let inline myfun (x: ^b) = x
    在intellisense中,它表示“x:'b - >'b”。在FSI中,它表示“x:^ b - > ^ b”<<<<<不同
  5. 由于智能感知从不显示^b,我应该在FSI中寻找^b作为“静态解决”的指标吗?

    inline是否保证“静态解决”?

1 个答案:

答案 0 :(得分:1)

Inline允许但不强制静态解析类型,这就是案例2中的原因。它与案例1中的相同。 我认为在大多数情况下,即使您没有指定^,类型推断也足够聪明,可以猜测该类型是否应该被静态解析。

例如,如果您在第3种情况下将函数体更改为sqrt x,则会获得

> let inline myfun (x: 'b) = sqrt x;;
val inline myfun :  ^b ->  ^a when  ^b : (static member Sqrt :  ^b ->  ^a)

我个人总是试着在第一次尝试时不明确指定类型,然后我检查我是否对推理感到满意,如果我不是那么我尝试添加内联,但不是帽子类型。

为什么intellisense有时会显示不同的东西?这可能是个小虫子。