Tôi bắt đầu học Scala ngày hôm qua, vì vậy tôi khá mới với nó. Một điều tôi muốn làm khi học một ngôn ngữ mới là cố gắng tạo ra một lib vi-TDD.Scala - Làm cách nào để thực hiện phương pháp "assertThrows"?
Đây là những gì tôi có cho đến nay:
def assert(condition: Boolean, message: String) {
if(!condition){ throw new AssertionError(message) }
}
def assertThrows[E](f: => Unit) {
try {
f
} catch {
case e: E => { return }
case _: Exception => { }
}
throw new AssertionError("Expected error of type " + classOf[E])
}
Mã này cho assert
công trình tốt, nhưng tôi đang gặp hai vấn đề với assertThrows
.
- Dường như tôi không thể sử dụng
E
trên dòng cuối cùng. Dù tôi có làm gì đi nữa, tôi vẫn nhận đượcclass type expected but E found error
. - Nếu tôi loại bỏ E từ dòng cuối cùng (thay thế nó bằng
throw new AssertionError("error expected")
, ví dụ) Tôi có được điều này:warning: abstract type E in type pattern is unchecked since it is eliminated by erasure
Tôi nghĩ rằng hai vấn đề tôi đang gặp có liên quan với cách Scala (và có lẽ java) giao dịch với các loại trừu tượng và chúng được thực hiện như thế nào.
Làm cách nào để khắc phục assertThrows của tôi?
Điểm thưởng: là cách tôi chỉ định "loại khối" (f: => Unit
) đúng không?
Một câu hỏi tôi đã không lâu trước đây có thể trợ giúp: http://stackoverflow.com/questions/7699709/scala-expected-exception-snippet –