3

非常简单的例子:

  1. let myfun x = x
    在智能感知中,它说“x:'a->'a”。在 FSI 中它说“x: 'a -> 'a”
  2. let inline myfun x = x
    在智能感知中,它说“x:'a->'a”。在 FSI 中它说“x: 'a -> 'a” <<<< 为什么不^a呢?
  3. let inline myfun (x: 'b) = x
    在智能感知中,它说“x:'b->'b”。在 FSI 中它说“x: 'b -> 'b”
  4. let inline myfun (x: ^b) = x
    在智能感知中,它说“x:'b->'b”。在 FSI 中它说“x: ^b -> ^b”<<<< 不同

由于智能感知从不显示^b,我应该^b在 FSI 中寻找“静态解决”的指标吗?

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

4

1 回答 1

1

内联确实允许但不强制静态解析类型,这就是为什么在案例 2 中。它与案例 1 相同。我认为在大多数情况下,类型推断足够聪明,可以猜测类型是否真的应该静态解析,即使你不要指定^.

例如,如果您将函数体更改为sqrt x案例 3。您将得到

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

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

为什么智能感知有时会显示不同的东西?这可能是一个小错误。

于 2013-05-02T08:49:51.423 回答