F# 基础函数

示例

F#中的大多数函数都是使用以下let语法创建的:

let timesTwo x = x * 2

这定义了一个命名函数timesTwo,该函数采用单个参数x。如果您运行一个交互式F#会话(fsharpi在OS X和Linux上,fsi.exe在Windows上)并将该函数粘贴(并添加;;告诉fsharpi您评估刚刚键入的代码的函数),您将看到它答复:

val timesTwo : x:int -> int

这意味着该timesTwo函数需要一个xtype类型的参数int,并返回int。函数签名通常没有参数名称,因此您经常会看到此函数类型写为int -> int。

可是等等!x由于您从未指定F#的类型,F#如何知道它是一个整数参数?那是由于类型推断。由于函数体中,您事半功倍x通过2,该类型的x和2必须相同。(通常,F#不会将值隐式转换为不同的类型;您必须显式指定所需的任何类型转换。)

如果要创建不带任何参数的函数,则这是错误的方法:

let hello =  // 这是一个值,而不是一个函数
    printfn "Hello world"

正确的做到这一点的方法是:

let hello () =
    printfn "Hello world"

该hello函数具有类型unit -> unit,在“单元”类型中有解释。