绑定
在F#中,给一个值标记上名字的过程叫作绑定(binding)。绑定是不可更改的,就像C#语言中的readonly
或者const
一样。因此,我们称这样的东西为绑定而非变量。由于F#是静态类型语言,所有的绑定必须在编译期就明确类型。
通过关键字let
来创建绑定。在大多数情况下,编译器足够聪明,能够推断出绑定的类型。(学习了type
关键字之后,你就会惊叹编译器已经聪明到难以想象的程度了!)
// 自动类型推断
let fingers = 10
函数其实也是普普通通的绑定,只不过带有参数而已。函数的最后一行会作为他的返回值。无论是函数参数,还是函数的返回值,编译器都会尽量地去自动推断。
// 如下的两个函数完全相同
let add x y = x + y
let add (x: int) (y: int) :int = x + y
类似于Haskell,调用函数的时候不需要括号和逗号。这点和C#有很大的不同,但你很快就会接受的。
let five = add 2 3
当编译器无法推断类型的时候,必须使用冒号:
来明确标注类型。(这种情况非常之罕见!当然,在任何情况下,你都可以明确标注类型。)
let fingers: int = 10
let add (x: int) (y: int): int = x + y
必须先定义绑定才能使用。这似乎类似于C++,毕竟在C++里,函数也必须先声明再使用。
// 这么做会无法通过编译。报错。
let seven = add 3 4
let add x y = x + y
在F#中,缩进是重要的,就像Python一样。
let toes =let left = 5let right = 5left + rightlet multiplyPlusTwo x y =let product = x * yproduct + 2
F#的绑定一般在module
(类似于C#的static class
)下进行。
module Calculatorlet pi = 3.14
let add x y = x + y
可变绑定(let mutable variable = ...
)暂不介绍。