Я начал изучать Scala вчера, так что я довольно новичок в этом.Одна вещь, которую я люблю делать при изучении нового языка, это попытаться создать библиотеку микро-TDD.
Это то, что я получил до сих пор:
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] )
}
Код для assert
работает просто отлично, но у меня две проблемы с assertThrows
.
- Кажется, я не могу использовать
E
в последней строке.Независимо от того, что я делаю, я получаю class type expected but E found error
. - Если я удаляю E из последней строки (например, заменяя ее на
throw new AssertionError("error expected")
), я получаю это: warning: abstract type E in type pattern is unchecked since it is eliminated by erasure
Я думаю, что две проблемы, с которыми я сталкиваюсь, связаны с тем, как Scala (и, вероятно, java) работает с абстрактными типами, и как они это делают.
Как я могу исправить мои assertThrows?
Бонусные баллы: правильно ли я указываю "тип блока" (f: => Unit
)?