gpt4 book ai didi

F# 与复杂类型匹配

转载 作者:行者123 更新时间:2023-12-04 22:42:00 24 4
gpt4 key购买 nike

我是 F# 新手,我正在尝试对复杂类型进行简单的模式匹配,但我找不到这样做的方法。请参阅下面的伪代码来解释我想要做的模式匹配。

type Vector= {X:int; Y:int}

let calculateDirection vector =
match vector with
| vector.X=0 && vector.Y>0 -> "N" // pseudo code
| vector.X>0 && vector.Y>0 -> "NE" // pseudo code
| vector.X>0 && vector.Y=0 -> "E" // pseudo code
| vector.X>0 && vector.Y<0 -> "SE" // pseudo code
| vector.X=0 && vector.Y<0 -> "S" // pseudo code
| vector.X<0 && vector.Y<0 -> "SW" // pseudo code
| vector.X<0 && vector.Y=0 -> "W" // pseudo code
| vector.X<0 && vector.Y>0 -> "NW" // pseudo code
| _ -> "Error"

我读了一些教程( https://fsharpforfunandprofit.com/posts/match-expression/ ),但它总是简单的场景,对我没有多大帮助。或者我只是不明白他们。

提前致谢。

最佳答案

使用事件模式,您可以获得非常可读的代码,如下所示:

type Vector= {X:int; Y:int}

let (|West|_|) v = if v.X < 0 then Some () else None
let (|East|_|) v = if v.X > 0 then Some () else None
let (|North|_|) v = if v.Y > 0 then Some () else None
let (|South|_|) v = if v.Y < 0 then Some () else None

let calculateDirection = function
| North & East -> Some "NE"
| North & West -> Some "NW"
| North -> Some "N"
| South & East -> Some "SE"
| South & West -> Some "SW"
| South -> Some "S"
| East -> Some "E"
| West -> Some "W"
| _ -> None

关于F# 与复杂类型匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45312666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com