Function “如何修复”;模式匹配并非详尽无遗;,
我想写一个函数,它将添加两个eval类型的元素Function “如何修复”;模式匹配并非详尽无遗;,,function,functional-programming,ocaml,Function,Functional Programming,Ocaml,我想写一个函数,它将添加两个eval类型的元素 type eval = Num of float | Neg | Add | Sub | Mul | Div;; OCaml编译器给了我这个警告,但我不知道它到底想要什么。它是有效的,但我想在没有这个警告的情况下实现它 # let (+++) (Num a) (Num b) = match (Num a), (Num b) with | (Add|Neg|Sub|Mul|Div), _ -> failwith "01" | _,
type eval = Num of float | Neg | Add | Sub | Mul | Div;;
OCaml编译器给了我这个警告,但我不知道它到底想要什么。它是有效的,但我想在没有这个警告的情况下实现它
# let (+++) (Num a) (Num b) =
match (Num a), (Num b) with
| (Add|Neg|Sub|Mul|Div), _ -> failwith "01"
| _, (Add|Neg|Sub|Mul|Div) -> failwith "02"
| _, _ -> Num (a +. b)
;;
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
(Neg|Add|Sub|Mul|Div)
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
(Neg|Add|Sub|Mul|Div)
val ( +++ ) : eval -> eval -> eval = <fun>
#let(++++)(Num a)(Num b)=
将(数量a)、(数量b)与
|(将| Neg | Sub | Mul | Div)添加到->failwith“01”
||(添加| Neg | Sub | Mul | Div)->带“02”的故障
|_u,u->Num(a+.b)
;;
警告8:此模式匹配并非详尽无遗。
以下是一个不匹配的案例示例:
(负添加子分区)
警告8:此模式匹配并非详尽无遗。
以下是一个不匹配的案例示例:
(负添加子分区)
val(+++):eval->eval->eval=
非详尽模式如下:
let (+++) (Num a) (Num b) = ...
使用这些模式,您可以假设++
的参数始终是Num
形式,而不在类型系统中强制执行它。
如果要消除警告,应展开模式匹配以捕获所有其他情况:
let (+++) x y = match x, y with
| ...
非详尽模式如下所示:
let (+++) (Num a) (Num b) = ...
使用这些模式,您可以假设++
的参数始终是Num
形式,而不在类型系统中强制执行它。
如果要消除警告,应展开模式匹配以捕获所有其他情况:
let (+++) x y = match x, y with
| ...
尝试使用
Num
以外的任何函数调用++
函数。您的failwith“01”
和failwith“02”
案例将永远无法到达。请尝试使用Num
以外的任何命令调用您的++
函数。您的failwith“01”
和failwith“02”
案例将永远无法到达。