非常简单的例子:
-
let myfun x = x
在智能感知中,它显示“x: 'a -> 'a”。在 FSI 中,它显示“x: 'a -> 'a”
-
let inline myfun x = x
在智能感知中,它显示“x: 'a -> 'a”。在 FSI 中,它显示“x: 'a -> 'a”^a?
-
let inline myfun (x: 'b) = x
在智能感知中,它显示“x: 'b -> 'b”。在 FSI 中,它显示“x: 'b -> 'b”
-
let inline myfun (x: ^b) = x
在智能感知中,它显示“x: 'b -> 'b”。在 FSI 中,它表示“x: ^b -> ^b”
由于智能感知从未显示^b
,我应该寻找^b
作为 FSI 中“静态解析”的指标?
Does inline
保证“静态解析”?
内联确实允许但不强制静态解析类型,这就是为什么在情况 2 中它与情况 1 中保持相同。
我认为在大多数情况下,类型推断足够聪明,可以猜测类型是否真的应该静态解析,即使您没有指定^
.
例如,如果您将函数体更改为sqrt x
如果情况 3. 你会得到
> let inline myfun (x: 'b) = sqrt x;;
val inline myfun : ^b -> ^a when ^b : (static member Sqrt : ^b -> ^a)
我个人总是尝试在第一次尝试时不明确指定类型,然后检查我是否对推论感到满意,如果不满意,那么我尝试添加内联,但不添加帽子类型。
为什么智能感知有时会显示不同的内容?这可能是一个小错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)