OCaml pattern matching with int and bool
1 2 3 4 5 |
每当我运行代码时,
1 2 3 4 5 |
这个也有类似的问题。我怎样才能得到我想要的结果?
模式匹配并不像你想象的那样工作。
它允许您将表达式与值或值模式匹配,如下所示:
1 2 3 4 | match some_int with | 1 -> 1 | 10 -> 2 | x -> x/2 (* this matches any possible int, and it gives it the name 'x' for the rest *) |
所以在这里您将始终匹配您的第一个案例,因为它不会过滤任何内容。您的意思是:将 v 与任何内容匹配,然后在其余部分将其称为 \\'bool\\'。
然后你可以尝试类似
1 2 3 4 5 | let disting v = match v with | true -> (*expression2*) | 2 -> (*expression1*) | _ -> (*expression3*) |
在 OCaml 中不进行类型检查,因为 \\'v\\' 是 int 或 bool,但不能同时是两者。
我不知道你想做什么,但你应该阅读一些关于语言的基础。
在 Ocaml 中做到这一点的方法是使用 sum 类型:
1 2 3 4 5 6 7 | type i_or_b = I of int | B of bool; let disting v = match v with | I x -> Printf.printf"v = I %d\ " x | B x -> Printf.printf"v = B %s\ " (string_of_bool x) |