Ocaml 如何获取用户定义类型数据的实际值?
如果我定义:Ocaml 如何获取用户定义类型数据的实际值?,ocaml,Ocaml,如果我定义: type value = | Value of int | Error of string;; 如果我想使用某个值的实际int值作为计算的一部分,比如: let v1 = Value 3;; let v2 = Value 4;; 如果我写: let sum = v1 + v2;; 然后我会收到一条错误消息 错误:此表达式具有类型值,但表达式的类型应为│ int 所以如果我想计算v1和v2的和。如何操作?您的值类型与int不同,前者有值和错误标记。您需要编写处理
type value =
| Value of int
| Error of string;;
如果我想使用某个值的实际int值作为计算的一部分,比如:
let v1 = Value 3;;
let v2 = Value 4;;
如果我写:
let sum = v1 + v2;;
然后我会收到一条错误消息
错误:此表达式具有类型值,但表达式的类型应为│
int
所以如果我想计算
v1
和v2
的和。如何操作?您的值
类型与int
不同,前者有值
和错误
标记。您需要编写处理这两种情况的代码,例如:
# match v1 with Error e1 -> Error e1 | Value i1 ->
# (match v2 with Error e2 -> Error e2 | Value i2 ->
# Value (i1 + i2)) ;;
- : value = Value 7
或者您可以编写一个函数:
# let sum x1 x2 =
# (match x1 with Error e1 -> Error e1 | Value i1 ->
# (match x2 with Error e2 -> Error e2 | Value i2 ->
# Value (i1 + i2))) ;;
val sum : value -> value -> value = <fun>
# sum v1 v2 ;;
- : value = Value 7
或者更好:
# let sum x1 x2 =
# match (x1, x2) with
# | (Some i1, Some i2) -> Some (i1 + i2)
# | _ -> None ;;
val sum : int option -> int option -> int option = <fun>
# sum v1 v2 ;;
- : int option = Some 7
#求和x1 x2=
#将(x1,x2)与
#|(一些i1,一些i2)->一些(i1+i2)
#|->无;;
val sum:int option->int option->int option=
#和v1 v2;;
-:int选项=大约7
作为一个高级主题,您还可以在谷歌上搜索“optionmonad”(也称为“maybe monad”)以获得更简单的表示法
您也可以使用异常而不是选项
,作为功能性较差的替代方案
# let sum x1 x2 =
# match (x1, x2) with
# | (Some i1, Some i2) -> Some (i1 + i2)
# | _ -> None ;;
val sum : int option -> int option -> int option = <fun>
# sum v1 v2 ;;
- : int option = Some 7