结果/嵌套模式匹配

时间:2013-04-10 18:25:56

标签: scala pattern-matching

当我通过多个模式匹配发送变量时,这样做的命名约定是什么?

val somethingBetweenOriginalAndResult = original match {
  case ...
  case ...
}
val somethingElseBetweenOriginalAndResult = somethingBetweenOriginalAndResult match {
  case ...
  case ...
}
val result = somethingElseBetweenOriginalAndResult match {
  case ...
  case ...
}

事实上,我只需要在我的命名空间之间引入的originalresult每个val,并要求我创建一个新的变量名称。我怎么能避免这个?

2 个答案:

答案 0 :(得分:4)

使用一个块和简短的临时变量名称(足够长的时间向某人建议你想要完成的事情 - 如果很明显,x并且公司会做得很好):

val original = ...
val result = {
  val x = original match { ... }
  val y = x match { ... }
  y match { ... }
}

如果您愿意,您甚至可以完全省略变量名称(虽然优先级是向后的,因此您需要添加parens或其他内容):

val result = {
  ((original match {
    ...
  }) match {
    ...
  }) match {
    ...
  }
}

因为上一场比赛的结果是下一场比赛的结果。

答案 1 :(得分:1)

如果你真的不关心某些东西,那么你应该尽量避免创造它。它实际上取决于原始类型和您在模式匹配中考虑的情况,但可能有一种方法可以通过一种模式匹配来实现。最糟糕的情况,为什么不使用它:

val result = original match {
  case ...
  case ...
} match {
  case ...
  case ...
} match {
  case ...
  case ...
}

我真的不喜欢它,但至少你没有创建一个你可能在以后偶然引用的不必要的值。