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,在“单元”类型中有解释。