OCaml基础问题:如何从tuple类型foobar中提取foo值?
嘿,刚接触OCaml的话,这种tuple类型的处理其实挺直观的,我来一步步给你讲清楚~
提取foobar中的foo值(非模式匹配方法)
因为你定义的type foobar = foo * bar本质就是二元tuple类型,OCaml标准库自带了专门处理二元tuple的函数,直接用就行:
- 用
fst函数可以取出tuple的第一个元素(也就是你要的foo值),写法很简单:let my_foo = fst a - 顺带提一句,要是之后需要取第二个元素(bar值),用
snd函数就好,用法和fst完全一样。
对tuple类型的foobar使用模式匹配
你提到没有把foobar定义成带构造函数的variant(比如| Foobar of foo * bar),但tuple本身就是可以直接做模式匹配的结构,根本不需要额外的构造函数,直接匹配tuple的结构就行:
- 最简单的是直接在let绑定里拆包:
要是只需要foo值,不想管bar,可以用下划线let (my_foo, my_bar) = a (* 同时取出foo和bar *)_表示忽略这个元素:let (my_foo, _) = a - 也可以把模式匹配写在函数里,比如专门写一个取foo的函数:
let get_foo (x, _) = x let my_foo = get_foo a - 或者用完整的
match表达式(适合更复杂的逻辑场景):let my_foo = match a with | (x, _) -> x
简单总结下:两种方法各有用处——如果只是单纯取第一个元素,fst函数最简洁;如果要同时处理多个元素,或者搭配其他逻辑分支,模式匹配会更灵活。
内容的提问来源于stack exchange,提问作者pleasehalp
相关产品推荐
相关产品推荐

