OCaml中如何将构造函数的参数转发给函数?
OCaml模式匹配中直接转发构造函数的元组参数
你的代码问题在于as pair绑定的是整个FromInt (a,b)实例(类型为foo_t),而不是构造函数携带的int * int元组参数。要实现直接转发参数元组的需求,有更简洁的写法:
最优解决方案:直接绑定元组参数
因为FromInt的定义是of int * int,它携带的参数本身就是一个元组,所以可以直接在模式匹配中把这个元组绑定为变量,无需拆分参数再重新组合:
type foo_t = | FromInt of int * int | FromFloat of float let sum_pair (a, b) = a + b ;; let f foo = match foo with | FromInt pair -> sum_pair pair (* pair直接是int * int类型的元组 *) | FromFloat _ -> 0 ;;
额外场景:需同时使用单个参数和元组
如果你的逻辑中既需要单独访问每个参数,又需要把它们作为元组转发,可以用嵌套模式绑定:
let f foo = match foo with | FromInt ((a, b) as pair) -> print_int a; sum_pair pair | FromFloat _ -> 0 ;;
这种写法既绑定了单个参数a、b,又绑定了元组pair,满足两种场景的需求。
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

