【发布时间】:2018-10-23 14:18:43
【问题描述】:
刚接触 Ocaml,所以问了一个非常基本的问题。
如果我有一个类型,比如 type foobar = foo * bar 和一个 foobar 类型的变量 a。是否可以使用方法从 a 中获取 foo 的值?除了模式匹配还有其他方法吗?另外,在这种情况下,您将如何应用模式匹配?由于声明的类型没有声明为type foobar = | Foobar of foo * bar?
【问题讨论】:
标签: ocaml
刚接触 Ocaml,所以问了一个非常基本的问题。
如果我有一个类型,比如 type foobar = foo * bar 和一个 foobar 类型的变量 a。是否可以使用方法从 a 中获取 foo 的值?除了模式匹配还有其他方法吗?另外,在这种情况下,您将如何应用模式匹配?由于声明的类型没有声明为type foobar = | Foobar of foo * bar?
【问题讨论】:
标签: ocaml
你可以像这样匹配一对:
# type intfloat = int * float;;
type intfloat = int * float
# let x : intfloat = (3, 5.5);;
val x : intfloat = (3, 5.5)
# let (int_part, _) = x in int_part;;
- : int = 3
# let (_, float_part) = x in float_part;;
- : float = 5.5
有一个函数(不是方法)fst 返回一对中的第一个元素。
# fst x;;
- : int = 3
但是fst的定义必然使用模式匹配:
let fst (a, b) = a
在此定义中,构造 (a, b) 是匹配一对的模式。
模式匹配是 OCaml 的重要组成部分,而不仅仅是一个花哨的可选功能。
【讨论】: