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有时会显示一些不同的东西?这可能是一个小错误。

    是的,它会显示。这就是它的工作原理。我认为值得注意的是,在大多数情况下,放置“^”不会传递任何额外的信息,因为参数约束只能在静态解析的类型参数上实现。我能想到的唯一例外是在这种情况下,您显式声明参数具有静态解析类型。