是否可以在没有案例的情况下进行模式匹配?

时间:2014-04-06 20:11:53

标签: pattern-matching sml smlnj

我还在学习SML,所以如果这是一个相当愚蠢的问题我会道歉。我想知道是否有更好的方法在函数之外的一些结构上进行模式匹配。

例如,假设我们有一个类型

type coord = int * int * int

然后我们有一些b类型的值coord。我知道我们可以在函数中进行模式匹配,例如:

fun get_x_coord ((x, y, z) : coord) = x

但是,假设我们正在使用b内部另一个未作为参数给出的函数。我想做什么

case b of
  (x,y,z) => (* do stuff *)
如果我有一个我想要的结果,那么

相当笨重(例如我知道会有三个整数值而我只想隔离它们。)

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

当然 - 您也可以在val - 绑定中使用模式匹配,因此您可以执行以下操作:

fun foo (b : coord) =
  let val (x, y, z) = b
  in (* do stuff *)
  end