值 (F#)

F# 中的值是一些具有特定类型的数量;值可以为整数或浮点数、字符或文本、列表、序列、数组、元组、可区分联合、记录、类类型或函数值。

绑定值

术语“绑定”意指将名称与定义关联。 let 关键字将绑定值,如下面的示例所示:

let a = 1
let b = 100u
let str = "text" 

// A function value binding. 

let f x = x + 1

值的类型是根据定义推断出的。 对于基元类型(例如整数或浮点数),类型由文本的类型确定。 因此,在前面的示例中,编译器将 b 的类型推断为 unsigned int,而将 a 的类型推断为 int。 函数值的类型由函数体中的返回值确定。 有关函数值类型的更多信息,请参见函数 (F#)。 有关文本类型的更多信息,请参见文本 (F#)

为何不可变?

不可变值是指在程序的整个执行过程中无法更改的值。 如果您习惯于使用 C++、Visual Basic 或 C# 之类的语言,可能会惊奇地发现,F# 会首先处理不可变值,而不是可在程序执行过程中赋予新值的变量。 不可变数据是函数编程中的一个重要元素。 在多线程环境中,可由许多不同线程更改的共享可变变量难于管理。 此外,对于可变变量,有时很难判断某个变量在传递到另一个函数时是否可更改。

纯粹的函数语言中没有变量,函数的行为也与数学函数的行为严格保持一致。 在过程语言中的代码使用变量赋值来更改值的情况下,函数语言中的等效代码会使用一个作为输入的不可变值、一个不可变函数以及不同的不可变值作为输出。 这种数学严格性实现了有关程序行为的更严格推理。 通过这种更严格的推理,编译器将能以更严格的方式检查代码,并以更有效的方式进行优化,并且,这种更严格的推理可以让开发人员更轻松地理解和编写正确的代码。 因此,与普通的过程代码相比,函数代码可能更易于调试。

F# 不是纯粹的函数语言,但它完全支持函数编程。 使用不可变值是一种很好的做法,因为这样做可以使代码从函数编程的一个重要方面中获益。

可变变量

您可以使用关键字 mutable 来指定可更改的变量。 F# 中的可变变量通常应有类型字段或局部值形式的有限范围。 具有有限范围的可变值更易于控制,并且被错误修改的可能性也更小。

您可以使用 let 关键字,采用像定义值一样的方式将初始值赋给可变变量。 但是,区别在于,您随后可以使用 <- 运算符将新值赋给可变变量,如下面的示例所示。

let mutable x = 1
x <- x + 1

相关主题

标题

说明

let 绑定 (F#)

提供有关使用 let 关键字的信息以将名称绑定到值和函数。

函数 (F#)

提供 F# 中函数的概述。

请参见

概念

Null 值 (F#)

其他资源

F# 语言参考