当它在一个类型前面时,"^"是什么意思?

Sco*_*rod 3 f#

当它在一个类型前面时,"^"是什么意思?

例:

int:^ T - > int

string:^ T - > string

Car*_*ten 8

这表示静态分辨的类型参数

来自MSDN:

静态解析的类型参数是一个类型参数,在编译时而不是在运行时用实际类型替换.它们前面有一个插入符号(^).

所以它非常相似,'T但你可以使用它来给出成员约束,编译器会在编译时解析它们(显然) - 通常你只是使用inline而且类型推断会为你解决 - 但是有一些相当的使用此(不常用)功能的高级技巧(例如FsControl)

let inline add a b = a + b

val inline add :
  a: ^a -> b: ^b ->  ^c
    when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^c)
Run Code Online (Sandbox Code Playgroud)

将添加这样的约束以指示这将适用于所有数字类型(它将向静态运算符添加成员约束(+))

  • 这实际上并没有那么糟糕 - 它只是告诉编译器应该查找类型 `a`、`b` 和 `c`,以便 `a` 或 `b` 具有一个名为 `( + )` 的静态运算符,并且给定签名,然后替换(“内联”)调用 - 在现实生活中,这将是单一类型上的加法运算符,如“int”或“double”(其中“a = b = c”) - 所以而不是“add 4” 5` 编译器将只产生 `4 + 5` 和 `int` 中的 `+` (2认同)