F # - สหภาพแรงงานที่เลือกปฏิบัติ
สหภาพแรงงานหรือสหภาพแรงงานที่เลือกปฏิบัติช่วยให้คุณสร้างโครงสร้างข้อมูลที่ซับซ้อนซึ่งแสดงถึงชุดตัวเลือกที่กำหนดไว้อย่างดี ตัวอย่างเช่นคุณต้องสร้างการใช้งานตัวแปรตัวเลือกซึ่งมีสองค่าใช่และไม่ใช่ การใช้เครื่องมือ 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
ตัวอย่างต่อไปนี้แสดงการใช้สถานะแรงดันไฟฟ้าที่ตั้งค่าสูงหรือต่ำ -
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 =
// here we store the radius of a circle
| Circle of float
// here we store the side length.
| Square of float
// here we store the height and width.
| 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