F# 如何检查函数';s类型参数是否静态解析?
非常简单的例子:F# 如何检查函数';s类型参数是否静态解析?,f#,inline,F#,Inline,非常简单的例子: 让myfun x=x 在这里,在智能感知中,它说“x:'a->'a”。在FSI中,它表示“x:'a->'a” 让内联myfun x=x 在这里,在智能感知中,它说“x:'a->'a”。在FSI中,它表示“x:'a->'a”“b”。在FSI中,它表示“x:'b->'b” 让内联myfun(x:^b)=x 在intellisense中,它表示“x:'b->'b”。在FSI中,它表示“x:^b->^b”内联允许但不强制静态解析类型,这就是为什么在案例2中。它与案例1中保持相同。 我认
让myfun x=x
在这里,在智能感知中,它说“x:'a->'a”。在FSI中,它表示“x:'a->'a”
让内联myfun x=x
在这里,在智能感知中,它说“x:'a->'a”。在FSI中,它表示“x:'a->'a”“b”。在FSI中,它表示“x:'b->'b”
让内联myfun(x:^b)=x
在intellisense中,它表示“x:'b->'b”。在FSI中,它表示“x:^b->^b”内联允许但不强制静态解析类型,这就是为什么在案例2中。它与案例1中保持相同。 我认为在大多数情况下,类型推断足够聪明,可以猜测类型是否真的应该静态解析,即使您没有指定
^
例如,如果在案例3中将函数体更改为sqrt x
,则
> let inline myfun (x: 'b) = sqrt x;;
val inline myfun : ^b -> ^a when ^b : (static member Sqrt : ^b -> ^a)
我个人总是尝试在第一次尝试时不显式指定类型,然后检查我是否对推断感到满意,如果不满意,则尝试添加内联类型,但不添加hat类型
为什么intellisense有时会显示一些不同的东西?这可能是一个小错误。是的,它会显示。这就是它的工作原理。我认为值得注意的是,在大多数情况下,放置“^”不会传递任何额外的信息,因为参数约束只能在静态解析的类型参数上实现。我能想到的唯一例外是在这种情况下,您显式声明参数具有静态解析类型。