Я начал изучать Scala вчера, так что я новичок в этом. Одна вещь, которую мне нравится делать при изучении нового языка, - это пытаться создать библиотеку micro-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
на последняя строка. Независимо от того, что я делаю, я получаю ожидаемый тип класса , но E обнаружил ошибку
. , выбрасываю новую AssertionError («ожидаемая ошибка»)
, например), я получаю следующее: предупреждение: абстрактный тип E в шаблоне типа не отмечен поскольку он устраняется стиранием
, я думаю, что две проблемы, которые у меня возникают, связаны с тем, как Scala (и, вероятно, java) работает с абстрактными типами, и как они решаются.
Как я могу исправить мои assertThrows?
Бонусные баллы: правильно ли я указываю «тип блока» ( f: => Unit
)?