使用变量来存储值

已完成

所有程序通常包含许多步骤,其中程序对数据进行作。 作为运行所有这些步骤的一部分,通常将间歇性结果(数据)存储在命名引用中。 然后,可以稍后读取或处理数据。 命名引用通常称为 变量

变量,可绑定值

变量是绑定到一个值的命名参考,用于在代码中持续引用。 在 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
布尔 可能的值为 truefalse
整数 (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# 中,可以使用三个不同的函数。 它们是 printfprintfn、甚至是 Console.WriteLine。 那么有什么区别?

  • printf:它将打印到 stdout 内联(没有换行符)。
  • printfn:它将打印到 stdout(添加换行符)。
  • Console.WriteLine:此函数来自 System 命名空间,适用于所有 .NET 语言。

现在你知道区别了,但应该使用哪一个? 嗯,printfprintfn 在 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 布尔值 truefalse printf "Setting on: %b" true

还有更多有关格式设置的信息。 若要了解所有功能,请参阅 F# 文档中的格式设置。