📜  F#-数据类型(1)

📅  最后修改于: 2023-12-03 14:41:21.139000             🧑  作者: Mango

F# - 数据类型

F#是一种函数式编程语言,它支持不可变性和静态类型。它提供了各种数据类型,这些数据类型可用于编写高效且严格类型安全的代码。

基本数据类型

以下是F#中使用的基本数据类型:

| 类型 | 描述 | | ------------ | ---------------------------------------------------- | | bool | 逻辑值(真或假) | | byte | 8位无符号整数 | | sbyte | 8位有符号整数 | | int16 | 16位有符号整数 | | uint16 | 16位无符号整数 | | int32 | 32位有符号整数 | | uint32 | 32位无符号整数 | | int64 | 64位有符号整数 | | uint64 | 64位无符号整数 | | float32 | 32位浮点数 | | float | 64位浮点数 | | char | 16位Unicode字符 | | string | 字符串 | | decimal | 128位十进制数,用于精确计算(例如货币) | | unit | 值类型为()的类型,表示无值 |

这些基本类型之间可以进行常见的操作,例如加、减、乘、除、比较等。

let x = 5
let y = 10
let z = x + y
printfn "%d" z // 输出15
列表类型

列表list是F#中最常见的数据类型之一。它是具有固定顺序的值的或引用的集合。列表中的元素可以是任何F#类型。

let lst = [1; 2; 3; 4; 5]

lst是一个包含整数1到5的列表。要访问列表中的元素,可以使用索引运算符:

let first = lst.[0]
let last = lst.[lst.Length - 1]
元组类型

元组是F#的另一种常见类型,它是一个有序的、将多个值一起组合的集合。元组中的值可以具有不同的类型。例如,以下是一个包含整数、浮点数和字符串的元组:

let tpl = (42, 3.14, "Hello")

要访问元组中的元素,可以使用点运算符:

let a = tpl.Item1
let b = tpl.Item2
let c = tpl.Item3
记录类型

记录类型是一种自定义类型,用于存储多个相关字段或属性。F#的记录类型类似于C#或VB.NET中的类或结构体。

type Person = { Name: string; Age: int; Occupation: string }

Person是一个记录类型,它具有三个字段:NameAgeOccupation。要创建一个Person对象,可以使用以下语法:

let john = { Name = "John"; Age = 42; Occupation = "Engineer" }

要访问记录中的字段,可以使用点运算符:

printfn "%s" john.Name
printfn "%d" john.Age
printfn "%s" john.Occupation
结构类型

结构类型是一种自定义类型,它类似于记录类型,但它具有值语义,而不是引用语义。与类不同,结构类型在堆上创建对象,而不是在栈上创建对象。

type Vector = struct
    val x: float
    val y: float
    val z: float

    new(x, y, z) = { x = x; y = y; z = z }

    static member (+) (a: Vector, b: Vector) =
        { x = a.x + b.x; y = a.y + b.y; z = a.z + b.z }

Vector是一个结构类型,它表示具有x、y和z值的向量。它有一个自定义的构造函数和一个重载的加法运算符。

let a = Vector(1.0, 2.0, 3.0)
let b = Vector(4.0, 5.0, 6.0)
let c = a + b
printfn "%f %f %f" c.x c.y c.z // 输出5.0 7.0 9.0
总结

F#提供了许多数据类型,它们各有不同的用途。了解这些类型使您能够编写更好且更安全的F#代码。