Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在F#中,定义为函数签名的类型称为什么_F# - Fatal编程技术网

在F#中,定义为函数签名的类型称为什么

在F#中,定义为函数签名的类型称为什么,f#,F#,在F#中,是否有以下方式定义的类型的特殊名称: type Foo = int -> string 我这样问是因为这种类型似乎有特殊的意义。与其他类型相比,它是相当抽象的,似乎只能作为一种函数接口使用。它在F#文献中讨论不多,但在许多F#OSS项目的源代码中有相当多的使用 它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为函数的接口之外,它还有其他应用程序吗?尽管可以通过定义一个具有匹配类型签名的函数来实现实例化,但为什么实例化并没有真正意义呢?或者它真的像说它是一个函数定义的别名

在F#中,是否有以下方式定义的类型的特殊名称:

type Foo = int -> string
我这样问是因为这种类型似乎有特殊的意义。与其他类型相比,它是相当抽象的,似乎只能作为一种函数接口使用。它在F#文献中讨论不多,但在许多F#OSS项目的源代码中有相当多的使用

它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为函数的接口之外,它还有其他应用程序吗?尽管可以通过定义一个具有匹配类型签名的函数来实现实例化,但为什么实例化并没有真正意义呢?或者它真的像说它是一个函数定义的别名一样简单,然后可以在其他类型签名/定义中作为一个简短的形式使用,并说明它的所有属性?

在F#文档中使用的这类定义的名称是,我认为许多人经常将其称为类型别名

该定义为较长的类型定义了别名或较短的名称。它说,无论何时键入
Foo
,编译器都会将其视为
int->string

  • 类型缩写不定义新类型,这意味着
    Foo
    int->string
    是等效的(一种类型的值也是另一种类型的值)。重点是:

  • 类型推断通常会推断原始类型,因此当您编写与该类型匹配的函数时,编译器会将其推断为
    int->string
    ,除非您给出明确的类型注释

  • 编译时,缩写将被删除(因为.NET没有这样的概念),因此编译后的代码将看到
    int->string


缩略语只是出于可读性的原因才有用——它允许您对类型使用更具描述性的名称。但是,它们没有太多其他含义。

我要补充的是,即使就CLR而言,缩写被删除了,但其他引用编译库的F#代码仍然可以看到它们。