Chúng tôi có một số mã khớp mẫu mà chúng tôi mong đợi được cảnh báo bởi trình biên dịch là khớp không đầy đủ, nhưng chúng tôi không nhận được. Có một số trường hợp không thể thực hiện kiểm tra toàn diện?Kiểm tra mức độ phù hợp để khớp mẫu ở Scala 2.11
ví dụ ví dụ của chúng tôi (sử dụng scalactic Tốt + Xấu):
(maybeModelIdOrFailure, maybeMake) match {
case (Some(Good(modelId)), Some(makeId)) if modelId >= 0 && taxonomyService.isValidModel(makeId, modelId) =>
Good(Some(MakeModelParameters(makeId, Some(modelId), modelLineId = None, index)))
case (Some(Good(modelLineId)), Some(makeId)) if modelLineId < 0 && taxonomyService.isValidModelLine(makeId, -1 * modelLineId) =>
Good(Some(MakeModelParameters(makeId, modelId = None, modelLineId = Some(-1 * modelLineId), index)))
case (Some(Good(modelOrModelLineId)), Some(makeId)) =>
Bad(One(IdNotFound(modelIdKeyName, modelOrModelLineId)))
case (Some(Good(modelId)), None) if modelId >= 0 =>
Bad(One(IdInvalid(modelIdKeyName, "Model Id without Make Id")))
case (Some(Good(modelLineId)), None) if modelLineId < 0 =>
Bad(One(IdInvalid(modelIdKeyName, "Model Line Id without Make Id")))
case (None, Some(makeId)) => Good(Some(MakeModelParameters(makeId, None, None, index)))
// case (None, None) => Good(None)
// case (Some(Bad(invalidParams)), _) => Bad(One(invalidParams))
}
Chúng tôi nhận xét hai dòng cuối cùng, nhưng trình biên dịch không cảnh báo và chúng tôi đã không vô hiệu hóa bất kỳ kiểm tra.
Nó có thể liên quan đến https://issues.scala-lang.org/browse/SI-7631 (mặc dù nó không nên có hiệu ứng như vậy một mình). Bạn có thể thử di chuyển các điều kiện bảo vệ bên trong các nhánh (ví dụ: 'case (Some (Good (modelId)), None) => if (modelId> = 0) ... else ...') và kiểm tra xem điều này có hữu ích không. –
Xin cảm ơn! thêm nó như là một câu trả lời và tôi sẽ chấp nhận nó! – longliveenduro