使用变量来存储值
所有程序通常由程序对数据进行操作的多个步骤组成。 在运行所有这些步骤的过程中,通常会将间歇性结果(即数据)存储在命名引用中。 你稍后可以读取或操作数据。 命名引用通常称为“变量”。
变量会绑定值
变量是绑定到你想要在代码中继续引用的值的命名引用。 在 F# 中,它被看作是绑定一个值。 因此,你要做的是将值分配(或绑定)到命名引用(也就是变量)。 若要绑定值,请使用 let
关键字(即引用名称)并为其赋值,如下面的代码中所示:
let name = "Chris"
name
是命名引用,“Chris”是它绑定的值。
为变量赋值后,变量是不可变的,不可更改它。 下面的代码不会进行编译,并产生类似“错误 FS0027: 此值不可变”的错误。
let name = "Chris"
name <- "Luis" // not allowed
使其可变
你可以更改变量,但需要发出你想要使其可变的信号。 通过在变量定义中使用 mutable
关键字,可在没有编译错误的情况下更改值,如以下代码中所示:
let mutable name = "Chris"
name <- "Luis" // this statement is now allowed
变量类型
F# 中存在不同类型的范围。 许多类型都与存储不同大小的数字和有无小数有关。 其他类型与文本字符串或布尔变量关联。 下面列出了开始学习 F# 时可能会遇到的类型。
类型 | 描述 |
---|---|
bool | 可能的值为 true 或 false |
int | 值的范围是 -2,147,483,648 至 2,147,483,647。 |
string | Unicode 文本 |
float、double | 64 位浮点类型。 |
类型已推断
在声明变量时,可以使用类型,也可以不使用类型。 如果在声明变量时不提供类型,F# 编译器将根据赋给变量的值对应该为哪种类型做出最佳推断。 请考虑下列语句:
let age = 65 // int
let PI = 3.14 // float
let name = "my name" // string
编译器将推断应该为哪些类型,并且推断正确。 你还可以更明确地表示所需的类型。 若要指定数据,请使用语法 variableName:<type>
,如以下代码中所示:
let sum:float = 0.0
打印到屏幕
你经常需要能够打印到屏幕。 这可能是出于各种原因,比如:
- 应用程序输出:应用程序进行某种计算,你需要查看输出。
- 调试:在调试代码的过程中,你可能需要在给定点输出结果以了解发生了什么问题。
需要输出到屏幕还有其他原因,但上述两种情况最为常见。
那么,如何打印到屏幕呢? 在 F# 中,可以使用三个不同的函数。 它们是 printf
、printfn
、甚至是 Console.WriteLine
。 它们的区别是什么?
printf
:它将打印到stdout
内联(没有换行符)。printfn
:它将打印到stdout
(添加一个换行符)。Console.WriteLine
:此函数来自System
命名空间,适用于所有 .NET 语言。
现在你了解了区别,但应该使用哪一种? 在 F# 中,printf
和 printfn
被认为更惯用,是首选的函数。
格式设置
在打印到屏幕的过程中,你可能需要组合文本和数字。 或者,你可能希望以特定方式设置输出的格式,例如通过使用:
位置参数:要设置格式,可以使用
String.Format
这样的 .NET 函数,该函数使用位置参数(如String.Format("My name is {0} and I live in {1}", "Chris", "UK")
)。字符串内插:组合变量和文本的另一种方法是使用内插操作。 若要使用它,需要在字符串前面加上
$
符号,并使用括号{}
指示占位符。 下面是使用内插的示例:let name = "Luis" let company = "Microsoft" printfn $"Name: {name}, Company: {company}"
还可以在括号之间添加表达式,如下所示:
let firstNumber = 2000 let secondNumber = 21 printfn $"The year is: {firstNumber + secondNumber}"
备注
不使用内插进行类型检查,因此使用起来可能很简单。 请务必正确地进行组合。
说明符:在尝试打印时,你还可以使用格式说明符。 使用说明符是在 F# 中设置格式的最常用方式。 下面是一个示例:
let name = "Chris" printf "Hi %s" name // prints: Hi Chris
在这里可以看到,如何使用格式化程序
%s
将第一个字符串与变量name
混合使用。备注
使用诸如 %s 或 %i 的格式化程序时,编译器将检查类型。 如果位置参数的类型不是指定的类型,则会引发错误。
格式说明符
有许多格式说明符。 下面是你可能会遇到的一些格式说明符。
说明符 | 说明 | 示例 |
---|---|---|
%s | 用于字符串和非转义内容 | printf "Hello %s" name |
%d、%i | 格式已设置为十进制整数,如果基本整数类型有符号,则它有符号 | printf "Age: %i" 65 |
%b | 布尔值 true 或 false |
printf "Setting on: %b" true |
还有更多有关格式设置的信息。 如果要了解所有功能,请参阅在 F# 中设置格式的文档。