2

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

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

事实上,我只需要original并且result在它们之间引入的每个 val 都会涂抹我的命名空间,并要求我研究一个新的变量名。我怎样才能避免这种情况?

4

2 回答 2

4

使用块和简短的临时变量名称(只要足够长的时间向某人建议您要完成的工作——如果很明显,x公司会做得很好):

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

如果您愿意,您甚至可以完全省略变量名(尽管优先级是向后的,所以您需要添加括号或其他内容):

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

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

于 2013-04-10T18:28:07.197 回答
1

如果您真的不关心某事ElseBetweenOriginalAndResult,也许您应该尽量避免创建它。这实际上取决于原始的类型和您在模式匹配中考虑的情况,但可能有一种方法可以通过一个模式匹配来实现。最坏的情况,为什么不使用它:

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

我真的不喜欢它,但至少你不会创造一个你以后可能会不小心提到的不必要的值。

于 2013-04-10T18:29:36.983 回答