gpt4 book ai didi

haskell - 在函数式编程中,模式匹配不完整是否被认为是一种不好的做法

转载 作者:行者123 更新时间:2023-12-03 08:46:09 26 4
gpt4 key购买 nike

在 Haskell 或 F# 等函数式语言中使用非详尽的模式处理通常被认为是一种不好的做法,这意味着指定的案例不涵盖所有可能的输入案例?

特别是,我应该允许代码以 MatchFailureException 失败吗?等等,还是我应该始终涵盖所有情况并在必要时明确抛出错误?

例子:

let head (x::xs) = x

或者
let head list = 
match list with
| x::xs -> x
| _ -> failwith "Applying head to an empty list"

F#(与 Haskell 不同)对第一个代码给出警告,因为 [] -case 不包括在内,但是为了简洁起见,我可以在不破坏功能样式约定的情况下忽略它吗?毕竟,MatchFailure 确实很好地说明了问题......

最佳答案

如果您使用构造函数完成模式匹配[]而不是包罗万象的_ ,编译器将有机会告诉您在有人向列表添加第三个构造函数的那一天再次查看该函数并发出警告。

我和我的同事在一个大型 OCaml 项目(超过 200,000 行)上工作,强制自己避免部分模式匹配警告(即使这意味着不时写 | ... -> assert false)并避免所谓的“fragile pattern-matchings "(模式匹配的编写方式可能无法检测到构造函数的添加)。我们认为可维护性是有益的。

关于haskell - 在函数式编程中,模式匹配不完整是否被认为是一种不好的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882334/

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