Dan*_*Dan 15 scala list pattern-matching
有没有办法在Scala中指定与大小更大(或更小)或等于某个值的List匹配的模式?
例如,如果我想对3个或更小的所有列表应用相同的操作:
list match {
    case Nil => op(list) 
    case x :: Nil => op(list)
    case x :: y :: Nil => op(list)
    case x :: y :: z :: Nil => op(list)
    case x :: tail => other(list)
} 
有没有办法将此减少到两个案例?
Tra*_*own 13
是的,虽然您需要撤销案件的顺序:
list match {
  case l @ (_ :: _ :: _ :: _) => other(l)
  case l => op(l)
}
请注意,我已将新变量绑定l到模式中的列表而不是引用list,并且我在_不需要变量时使用了该变量.我建议坚持这两种做法,但如果没有它们,答案将完全相同.
Fyn*_*ynn 11
如果您坚持使用模式匹配(也许您想要包含更多匹配案例?),您可以使用保护条件:
list match {
    case l if(l.size <= 3) => op(l)
    case l => other(l)
}
一个普通的老if/else有什么问题?
if (list.length >= minimumLength)
  longer(list)
else
  shorter(list)
| 归档时间: | 
 | 
| 查看次数: | 7448 次 | 
| 最近记录: |