使用变量来存储值
所有程序通常包含许多步骤,其中程序对数据进行作。 作为运行所有这些步骤的一部分,通常将间歇性结果(数据)存储在命名引用中。 然后,可以稍后读取或处理数据。 命名引用通常称为 变量。
变量,可绑定值
变量是绑定到一个值的命名参考,用于在代码中持续引用。 在 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# 时可能会遇到的类型列表。
| 类型 | DESCRIPTION |
|---|---|
| 布尔 | 可能的值为 true 或 false |
| 整数 (int) | 值从 -2,147,483,648 到 2,147,483,647。 |
| 字符串 | Unicode 文本 |
| 浮点,双精度 | 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 语言。
现在你知道区别了,但应该使用哪一个? 嗯,printf 和 printfn 在 F# 中被认为是更惯用的选择。
格式化
在打印到屏幕时,可能需要合并文本和数字。 或者,你可能希望以某种方式格式化输出,例如使用:
位置参数:若要设置格式,可以使用 .NET 函数,
String.Format该函数使用位置参数,例如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)时,编译器会检查类型。 如果位置参数不是指定的类型,则会引发错误。
格式说明符
有许多格式说明符。 以下是你可能遇到的一些问题。
| 说明符 | DESCRIPTION | 示例: |
|---|---|---|
| %s | 用于字符串和非转义内容 | printf "Hello %s" name |
| %d,%i | 格式化为十进制整数,如果基本整数类型是有符号的,则格式化为带符号的整数。 | printf("年龄: %i", 65) |
| %b | 布尔值 true 或 false |
printf "Setting on: %b" true |
还有更多有关格式设置的信息。 若要了解所有功能,请参阅 F# 文档中的格式设置。