Giả sử tôi có một đặc điểm, Phụ huynh, với một đứa con, Đứa trẻ.Làm cho Biên dịch thất bại khi không khớp hoàn toàn trong SBT
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined module Boy
Tôi viết một hàm phù hợp với đặc điểm được đóng kín. Hàm f
của tôi là tổng số vì chỉ có một phiên bản Parent
duy nhất.
scala> def f(p: Parent): Boolean = p match {
| case Boy => true
| }
f: (p: Parent)Boolean
Sau đó, 2 tháng sau đó, tôi quyết định thêm một đứa trẻ Girl
của Parent
.
scala> case object Girl extends Parent
defined module Girl
Và sau đó viết lại phương thức f
vì chúng tôi đang sử dụng REPL.
scala> def f(p: Parent): Boolean = p match {
| case Boy => true
| }
<console>:10: warning: match may not be exhaustive.
It would fail on the following input: Girl
def f(p: Parent): Boolean = p match {
^
f: (p: Parent)Boolean
Nếu tôi gặp phải một trận đấu không đầy đủ, tôi sẽ nhận được cảnh báo biên dịch (như chúng ta thấy ở đây).
Tuy nhiên, làm cách nào tôi có thể thực hiện quá trình biên dịch không thành công trên kết quả không đầy đủ?
Kỹ thuật này trả lời câu hỏi, nhưng thường không phải là giải pháp khả thi. Cá nhân tôi muốn được nhìn thấy câu trả lời mà không yêu cầu thất bại trên tất cả các cảnh báo, ngay cả khi họ đang messier. –
@TravisBrown: Viết ngắn trình biên dịch plugin hoặc plugin SBT của riêng bạn, đây là giải pháp duy nhất có sẵn. –
@TravisBrown, tại sao nó thường không phải là một giải pháp "khả thi"? –