F# - 联合(Unions)

F# - 联合(Unions) 首页 / F#入门教程 / F# - 联合(Unions)

联合(Unions)或有区别的联合(Discriminated Unions)使您可以创建明确的选择集的复杂数据结构。如,您需要构建 choice 变量的实现,该变量具有两个值yes和no,使用联合(Unions)工具,可以对此进行设计。

type type-name =
   | case-identifier1 [of [ fieldname1 : ] type1 [ * [ fieldname2 : ] 
type2 ...]
   | case-identifier2 [of [fieldname3 : ]type3 [ * [ fieldname4 : ]type4 ...]
...

简单实现如下所示-

type choice =
   | Yes
   | No

以下示例使用类型选择-

type choice =
   | Yes
   | No

let x=Yes (* creates an instance of choice *)
let y=No (* creates another instance of choice *)
let main() =
   printfn "x: %A" x
   printfn "y: %A" y
main()

编译并执行程序时,将产生以下输出-

x: Yes
y: No

示例1

以下示例显示了将状态设置为高(High)或低(Low)的电压状态的实现-

无涯教程网

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-discriminated-unions.html

来源:LearnFk无涯教程网

type VoltageState =
   | High
   | Low

let toggleSwitch=function (* pattern matching input *)
   | High -> Low
   | Low -> High

let main() =
   let on=High
   let off=Low
   let change=toggleSwitch off

   printfn "Switch on state: %A" on
   printfn "Switch off state: %A" off
   printfn "Toggle off: %A" change
   printfn "Toggle the Changed state: %A" (toggleSwitch change)

main()

编译并执行程序时,将产生以下输出-

Switch on state: High
Switch off state: Low
Toggle off: High
Toggle the Changed state: Low

示例2

type Shape =
   //这里存储一个圆的半径
   | Circle of float

   //这里存储边长。
   | Square of float

   //这里存储高度和宽度。
   | Rectangle of float * float

let pi=3.141592654

let area myShape =
   match myShape with
   | Circle radius -> pi * radius * radius
   | Square s -> s * s
   | Rectangle (h, w) -> h * w

let radius=12.0
let myCircle=Circle(radius)
printfn "Area of circle with radius %g: %g" radius (area myCircle)

let side=15.0
let mySquare=Square(side)
printfn "Area of square that has side %g: %g" side (area mySquare)

let height, width=5.0, 8.0
let myRectangle=Rectangle(height, width)
printfn "Area of rectangle with height %g and width %g is %g" height width (area myRectangle)

编译并执行程序时,将产生以下输出-

Area of circle with radius 12: 452.389
Area of square that has side 15: 225
Area of rectangle with height 5 and width 8 is 40

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

程序员的数学基础课 -〔黄申〕

Go语言从入门到实战 -〔蔡超〕

NLP实战高手课 -〔王然〕

软件设计之美 -〔郑晔〕

如何看懂一幅画 -〔罗桂霞〕

Linux内核技术实战课 -〔邵亚方〕

JavaScript进阶实战课 -〔石川〕

技术领导力实战笔记 2022 -〔TGO 鲲鹏会〕

云原生基础架构实战课 -〔潘野〕

好记忆不如烂笔头。留下您的足迹吧 :)