- F# 基础教程
- F# - 主页
- F# - 概述
- F# - 环境设置
- F# - 程序结构
- F# - 基本语法
- F# - 数据类型
- F# - 变量
- F# - 运算符
- F# - 决策
- F# - 循环
- F# - 函数
- F# - 字符串
- F# - 选项
- F# - 元组
- F# - 记录
- F# - 列表
- F# - 序列
- F# - 集
- F# - 地图
- F# - 受歧视的工会
- F# - 可变数据
- F# - 数组
- F# - 可变列表
- F# - 可变字典
- F# - 基本 I/O
- F# - 泛型
- F# - 代表
- F# - 枚举
- F# - 模式匹配
- F# - 异常处理
- F# - 类
- F# - 结构
- F# - 运算符重载
- F# - 继承
- F# - 接口
- F# - 事件
- F# - 模块
- F# - 命名空间
- F# 有用资源
- F# - 快速指南
- F# - 有用的资源
- F# - 讨论
F# - 结构
F# 中的结构是一种值类型数据类型。它可以帮助您创建单个变量,保存各种数据类型的相关数据。struct关键字用于创建结构。
句法
定义结构的语法如下 -
[ attributes ] type [accessibility-modifier] type-name = struct type-definition-elements end // or [ attributes ] [<StructAttribute>] type [accessibility-modifier] type-name = type-definition-elements
有两种语法。最常用的是第一种语法,因为如果使用struct和end关键字,则可以省略StructAttribute属性。
结构定义元素提供 -
- 成员声明和定义。
- 构造函数以及可变和不可变字段。
- 成员和接口实现。
与类不同,结构不能被继承,也不能包含 let 或 do 绑定。因为,结构没有 let 绑定;您必须使用val关键字声明结构中的字段。
当您使用val关键字定义字段及其类型时,您无法初始化字段值,而是将它们初始化为零或 null。因此,对于具有隐式构造函数的结构,val声明应使用DefaultValue属性进行注释。
例子
以下程序创建一个行结构以及一个构造函数。该程序使用以下结构计算线的长度 -
type Line = struct val X1 : float val Y1 : float val X2 : float val Y2 : float new (x1, y1, x2, y2) = {X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;} end let calcLength(a : Line)= let sqr a = a * a sqrt(sqr(a.X1 - a.X2) + sqr(a.Y1 - a.Y2) ) let aLine = new Line(1.0, 1.0, 4.0, 5.0) let length = calcLength aLine printfn "Length of the Line: %g " length
当您编译并执行该程序时,它会产生以下输出 -
Length of the Line: 5