-6ren">
gpt4 book ai didi

f# - OR 模式匹配

转载 作者:行者123 更新时间:2023-12-01 08:15:43 25 4
gpt4 key购买 nike

我正在尝试使用 OR 模式,如 here 所述:

let foo = function
| Some (0, x) when x > 0 | None -> "bar"
| _ -> "baz"

但是,这会导致编译器错误:

error FS0010: Unexpected symbol '|' in pattern matching. Expected '->' or other token.



我究竟做错了什么?和 when有关系吗? guard ?

最佳答案

A when守卫指的是单个案例,无论组合了多少模式。需要分开的案例:

let foo = function
| Some (0, x) when x > 0 -> "bar"
| None -> "bar"
| _ -> "baz"

出于这个原因,最好将返回值分解出来,因此不会重复可能复杂的表达式:
let foo value =
let ret = "bar"
match value with
| Some (0, x) when x > 0 -> ret
| None -> ret
| _ -> "baz"

使用事件模式是避免此类重复的另一种方法:
let (|Bar|_|) = function
| Some(0, x) when x > 0 -> Some()
| None -> Some()
| _ -> None

let foo = function
| Bar -> "bar"
| _ -> "baz"

关于f# - OR 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10986353/

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